读取文件(带缓冲区)
readFile.go
package main import ( "bufio" "fmt" "io" "os" ) func main() { // 打开文件 file, err := os.Open("/Users/jackey/Downloads/3.txt") if err != nil { fmt.Println("打开文件失败,", err) } // 当函数退出时,要及时关闭file defer file.Close() reader := bufio.NewReader(file) for { str, err := reader.ReadString('\n') if err == io.EOF { //io.EOF 表示文件的末尾 break } fmt.Print(str) } fmt.Println("文件读取结束") }
读取文件(不带缓冲区,适用于小文件)
readFile.go
package main import ( "fmt" "io/ioutil" ) func main() { // 使用ioutil.ReadFile一次性读取 file := "/Users/jackey/Downloads/3.txt" content, err := ioutil.ReadFile(file) if err != nil { fmt.Println("文件读取失败", err) } // 把读取到的内容显示到终端 fmt.Printf("%v", string(content)) // 没有显式的open文件,因此也不需要显式的close文件 // 文件的open和close被封装到ReadFile函数内部 }
创建文件并写入内容
file.go
package main import ( "bufio" "fmt" "os" ) func main() { filePath := "/Users/jackey/Downloads/1.txt" file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666) if err != nil { fmt.Println("打开文件失败") return } // 及时关闭file句柄 defer file.Close() str := "这里是写入内容,gopher.cc \n" // 写入时,使用带缓存的 *Writer, 对于批量写入提高写入效率 writer := bufio.NewWriter(file) for i := 0; i < 5; i++ { writer.WriteString(str) } // 内容是先写入到缓存的,因此需要调用 Flush方法,将缓存数据真正写入到文件中 writer.Flush() }
OpenFile 几种打开文件方式的定义
const ( O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件 O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件 O_RDWR int = syscall.O_RDWR // 读写模式打开文件 O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部 O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件 O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在 O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件 )
文件copy
package main import ( "bufio" "fmt" "io" "os" ) func CopyFile(distFileName string, srcFileName string) (written int64, err error) { srcFile, err := os.Open(srcFileName) if err != nil { fmt.Println("open file err ", err) } defer srcFile.Close() // 通过srcFile 获取到 Reader reader := bufio.NewReader(srcFile) dstFile, err := os.OpenFile(distFileName, os.O_WRONLY | os.O_CREATE, 0666) if err != nil { fmt.Println("open file err ", err) } // 通过 dstFile 获取到 Writer writer := bufio.NewWriter(dstFile) defer dstFile.Close() return io.Copy(writer, reader) } func main() { srcFile := "/Users/jackey/Downloads/1.jpg" //源文件 dstFile := "/Users/jackey/Downloads/2.jpg" //copy后的文件 _, err := CopyFile(dstFile, srcFile) if err != nil { fmt.Println("copy 失败 ", err) } else { fmt.Println("copy 成功") } }
6 条评论
golang,只是有书,从来没有用过
用用吧,你会爱上她的。
祝你好运哈!
大佬求go资料!谢谢~
已发邮件,请查收
文章不错支持一下吧