文件程序中是以流的形式操作的。

流:数据在数据源(文件)和程序(内存)之间经历的路径;

输入流:数据从数据源到程序的路径;

输出流:数据从程序到数据源的路径;

常用的文件操作和函数:

1.常用的文件操作函数和方法(打开和关闭文件)

2.读取文件中的内容,并显示给终端(带缓冲区的方式),使用os.Open(),file.Close(),bufio.NewReader(),reader.ReadString()

3.读取文件并显示在终端(使用Ioutil一次将整个文件读入到内存中) ,这种方式适用于文件不太大情况下,相关方法ioutil.ReadFile

4.写文件

(1)创建一个新文件夹,并写入hello world;

(2)打开一个存在的文件,并将内容覆盖为新的;

(3)打开一个存在的文件,并在末尾追加新内容;

(4)打开一个存在的文件,将原来的内容读出并显示在终端,并且追加新内容;

package main

import (
"bufio"
"fmt"
"io"
"os"
) func main() {
filepath := "test.txt"
//主要是参数的区别
file, err := os.OpenFile(filepath, os.O_RDWR|os.O_APPEND, )
if err != nil {
fmt.Println("open file error=\n", err)
} defer file.Close() reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
fmt.Println(str)
} str := "hello world\n"
writer := bufio.NewWriter(file)
for i := ; i < ; i++ {
writer.WriteString(str)
}
//因为writer是带缓存的,因此在调用WriteString的时候是先将数据存入到缓存的
//因此真正写入到文件中是要用Flush方法,否则文件中会没有数据
writer.Flush()
}

5.读取一个文件中的内容写到另一个文件中

6.判断文件或目录是否存在

说明:如果文件夹存在,则返回true,nil;如果文件夹不存在,则返回false,nil;如果返回false,err,则说明是其它错误。

7.将一个目录下的图片拷贝到另一个目录下

package main

import (
"bufio"
"fmt"
"io"
"os"
) func copyFile(dstFileName string, srcFileName string) (written int64, err error) {
srcfile, err := os.Open(srcFileName)
if err != nil {
fmt.Println("open file error=", err)
}
defer srcfile.Close()
reader := bufio.NewReader(srcfile) dstfile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, )
if err != nil {
fmt.Println("open file error=", err)
}
defer dstfile.Close()
writer := bufio.NewWriter(dstfile)
return io.Copy(writer, reader)
}
func main() {
file1path := "D:/dlrb.jpg"
file2path := "E:/dlrb.jpg"
_, err := copyFile(file2path, file1path)
if err == nil {
fmt.Println("拷贝完成")
} else {
fmt.Println("拷贝失败 error=", err)
} }

8.统计文件里面的不同种类字符的个数

func main() {
file1path := "test1.txt"
srcfile, err := os.Open(file1path)
if err != nil {
fmt.Println("open file error=", err)
return
}
defer srcfile.Close()
var count charCount
reader := bufio.NewReader(srcfile)
for {
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
for _, v := range str {
fmt.Println(string(v))
switch {
case v >= 'a' && v <= 'z':
fallthrough
case v >= 'A' && v <= 'z':
count.chCount++
case v == ' ' || v == '\t':
count.spaceCount++
case v >= '' && v <= '':
count.numCount++
default:
count.otherCount++
}
}
} fmt.Printf("字符个数:%v,数字个数:%v,空格个数:%v,其它个数:%v",
count.chCount, count.numCount, count.spaceCount, count.otherCount)
}

(三十六)golang--文件的基本操作的更多相关文章

  1. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  2. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  4. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  5. 风炫安全web安全学习第三十六节课-15种上传漏洞讲解(一)

    风炫安全web安全学习第三十六节课 15种上传漏洞讲解(一) 文件上传漏洞 0x01 漏洞描述和原理 文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把 ...

  6. [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)

    [系统安全] 十六.PE文件逆向基础知识(PE解析.PE编辑工具和PE修改) 文章来源:https://masterxsec.github.io/2017/05/02/PE%E6%96%87%E4%B ...

  7. Java进阶(三十六)深入理解Java的接口和抽象类

    Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...

  8. 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...

  9. “全栈2019”Java第三十六章:类

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. 微信小程序把玩(三十六)Storage API

    原文:微信小程序把玩(三十六)Storage API 其实这个存储在新建Demo的时候就已经用到了就是存储就是那个logs日志,数据存储主要分为同步和异步 异步存储方法: 存数据 wx.setStor ...

随机推荐

  1. C# WPF基础巩固

    时间如流水,只能流去不流回. 学历代表你的过去,能力代表你的现在,学习能力代表你的将来. 学无止境,精益求精. 一.写作目的 做C# WPF开发,无论是工作中即将使用,还是只应付跳槽面试,开发基础是非 ...

  2. django测试开发-1.开始Hello django!

    用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,本篇写一个简单的“hello django! ...

  3. 你真的了解 volatile 关键字吗?

    今天,让我们一起来探讨 Java 并发编程中的知识点:volatile 关键字 本文主要从以下三点讲解 volatile 关键字: volatile 关键字是什么? volatile 关键字能解决什么 ...

  4. vue 父子组件通信详解

    这是一篇详细讲解vue父子组件之间通信的文章,初始学习vue的时候,总是搞不清楚几个情况 通过props在父子组件传值时,v-bind:data="data",props接收的到底 ...

  5. linux centos ubutun svn搭建

    1.卸载SVN 查看自己是否安装了svn svn 上图显示已安装,可用以下命令进行卸载 sudo apt-get remove --purge subversion (–purge 选项表示彻底删除改 ...

  6. Django实现WebSSH操作物理机或虚拟机

    我想用它替换掉xshell.crt之类的工具 WebSSH操作物理机或虚拟机 Django实现WebSSH操作Kubernetes Pod文章发布后,有小伙伴说咖啡哥,我们现在还没有用上Kuberne ...

  7. CSPS模拟 68

    令人kuku的一场考试, T1 令人kuku的贪心,反工了好几次,耗费了1h之久. T2 令人kuku的数据结构,到死也没调出来,还是细节问题,要积累. T3 令人kuku的二分答案. 先二分第一个答 ...

  8. Jenkins+JMeter+Ant 接口持续集成

    ​JMeter安装 JMeter安装包: 下载地址:https://jmeter.apache.org/download_jmeter.cgi 依赖JDK环境 JDK环境配置: JAVA_HOME   ...

  9. Docker 学习 | 基础命令

    基本概念定义 基本组成 客户端/守护进程 C/S架构 本地/服务器 镜像 容器基石 只读文件系统 联合加载(union mount) 容器 通过镜像启动 执行 写时复制 仓库 公有 docker hu ...

  10. mysql update获取主键

    mysql update获取主键<pre>SET @update_id := 0;UPDATE mobantestinfo1 SET info2 = 'value', id = (SELE ...