对单个文件读取写入 带缓冲区 bufio包
打开一个存在的文件,并且将原来的内容覆盖为新的内容。这里不需要创建文件所以不需要使用
os.O_CREATE。
os.O_TRUNC | os.O_WRONLY 以写的方式打开已经存在的文件,在写之前清空文件里面的内容。
如果要在原来文件内容的后面追加,并不是将原来的文件覆盖掉,比如在写日志的时候是追加写。
下面是追加的形式,就不是覆盖写了。
再接下来就是打开一个文件,将原来的内容读出来显示在终端,并且追加。这就需要文件是以读写的方式打开,并且以追加的方式打开。
这里面关键就是告诉其以读写到方式打开,写到时候以追加到方式往里面写。
不带缓冲区,一次性读写
编写一个程序,将一个文件内容,写入到另外一个文件,这两个文件都是存在的。
使用ioutil.ReadFile /ioutil.WriteFile 完成写文件的任务。
思路其实也和下面这个步骤一样,打开一个文件,然后创建一个文件,从打开的文件当中使用死循环不断向目标文件里面写入数据。
- srcf = open(src)
- dstf= create(dst)
- read srcf=>ctx
- writer dstf ctx=>
- srcf.close dstf.close()
io包里面有copy函数,这个copy函数其实就是从src里面读取内容,然后写到dst里面去。下面就是不断从文件当中读取内容,往标准输出上面去写。
判断是文件还是目录
操作目录,对目录的读取。
如果是一个目录,就不能读取里面的内容。所以这里还得判断是文件还是目录。
func (*File) Stat
- func (f *File) Stat() (FileInfo,error)
下面就是将文件的名称,判断是否为目录这些等都打印出来。
获取目录下面所有文件的信息
func (*File) Readdirnames
-1代表将当前文件夹下面的文件名称全部读取出来,不会递归读取。
func (*File) Readdir
- func (f *File) Readdir(nint) ([]FileInfo,error)
判断文件是否存在
在进行文件操作的时候,有时候会有这样一个功能,判断文件是否存在,这个在项目里面会经常使用。
判断文件是否存在
golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断
- 如果返回的错误为nil,说明文件或文件夹存在
- 如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在
- 如果返回的错误为其它类型,则不确定是否在存在
func Stat
func Stat(name string) (FileInfo, error)
这个可以自己定义一个函数,输入路径来判断目录或者文件是否存在。(传入文件路径,根据布尔值来判断文件是否存在,true为文件/文件夹存在,反之)
总结
文件
- 创建:os.Create 如果文件存在会去清空文件
- 读取:os.0pen
- 获取属性:os.0pen().Stat/os.Stat
- 修改属性:权限,所属人
- 重命名:os.Rename("test1.txt","test2.txt") //不仅仅可以重命名,还可以将文件移动到某些目录下面 os.Rename("test/file1","a/b/c/file2")
- 删除文件:os.Remove("test1.txt")
没有复制的功能!
目录
- 创建:os.Mkdir("a",os.ModePerm) os.MkdirAll("a/b/c",os.ModePerm)
- 读取:os.0pen
- 获取属性:os.0pen().Stat/ os.Stat
- 修改属性:权限,所属人os.Chmod() os.Chown()
- 重命名:os.Rename
- 删除文件夹:os.Remove os.RemoveAll