文件操作
使用os
包
打开和关闭文件
1 2 3 4 5 6 7 8 9 10 11
| file,err := os.Open("go.mod") if err != nil { fmt.Println(err) } fmt.Println(*file)
err2 := file.Close() if err2 != nil { fmt.Println("关闭失败: ",err) }
|
io的引入
io是流 程序和数据源之间沟通的桥梁这个桥梁就是io流
方向的定义:
- 从数据源向程序传入就是输入流 读取
- 从程序向外面传输就是输出流 输出
如果单靠os的file结构体只能读取到文件,不能对文件的内容进行操作
读取并输出到控制台(适合小文件)
此处不需要执行打开和关闭操作 因为都封装到了ReadFile包中
1 2 3 4 5 6 7
| import ( "fmt" "os" _"io/ioutil" ) content,_ := os.ReadFile("go.mod") fmt.Printf("%v",string(content))
|
带缓冲的读取文件 适合大文件
缓冲区的方式-4096字节,
使用:os.Open()
file.Close()
bufio
NewReader()
reader.ReadString
函数和方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| file, err := os.Open("a.txt") if err != nil { fmt.Println("文件打开失败:",err) return }
defer file.Close()
reader := bufio.NewReader(file) for { str,err := reader.ReadString('\n') if err == io.EOF{ break } fmt.Printf("%v",str) } fmt.Println("exit...")
|
输出文件
Openfile的打开模式
- O_RDONLY // 只读模式打开文件
- O_WRONLY // 只写模式打开文件
- O_RDWR // 读写模式打开文件
- O_APPEND // 写操作时将数据附加到文件尾部
- O_CREATE // 如果不存在将创建一个新文件
- O_EXCL // 和O_CREATE配合使用,文件必须不存在
- O_SYNC // 打开文件用于同步I/O
- O_TRUNC // 如果可能,打开时清空文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import ( "fmt" "os" "bufio" ) func main(){ file,_ := os.OpenFile("b.txt",os.O_RDWR | os.O_APPEND | os.O_CREATE,0666) defer file.Close() writer := bufio.NewWriter(file) writer.WriteString("66dfohjdoihdl\njhlkfdjghlkdfjghl") writer.Flush() fmt.Println("exit...") }
|
复制文件
使用ioutil
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import ( "fmt" "io/ioutil" ) func main(){ reader,err := ioutil.ReadFile("a.txt") if err != nil { fmt.Println("打开文件失败:",err) return } err2 := ioutil.WriteFile("d.txt",reader,0777) if err2 != nil { fmt.Println("写入失败:",err2) }
fmt.Println("exit...") }
|
使用缓冲区复制 一遍读一边写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import ( "fmt" "os" "bufio" "io" ) func main(){ file,err := os.Open("a.txt") if err != nil { fmt.Println("打开文件失败:",err) return } defer file.Close() reader := bufio.NewReader(file) save,err := os.OpenFile("e.txt",os.O_CREATE | os.O_APPEND | os.O_RDWR,0777) writer := bufio.NewWriter(save) defer writer.Flush() for { str,err := reader.ReadString('\n') writer.WriteString(str) fmt.Println(str) if err == io.EOF { break } } fmt.Println("exit...") }
|