在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 os.File 封装了文件相关操作
os.File Pkg Doc
读写参数文件打开模式: 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 // 如果可能,打开时清空文件 ) 权限控制: r ——> 004 w ——> 002 x ——> 001
读取栗子os.Open || os.OpenFile package main import ( "bufio" "fmt" "os" ) func main() { // file, err := os.Open("/tmp/test") file, err := os.OpenFile("/tmp/test", os.O_CREATE|os.O_WRONLY, 0666) if err != nil { fmt.Println("Open file error: ", err) return } defer file.Close() //关闭文件 reader := bufio.NewReader(file) //带缓冲区的读写 for { str, err := reader.ReadString('\n') // 循环读取一行 if err != nil { fmt.Println("read string failed, err: ", err) return } fmt.Println("read string is %s: ", str) } }
readlinepackage main import ( "bufio" "fmt" "io" "os" ) func main() { file, err := os.Open("C:/test.log") if err != nil { fmt.Println(err) return } defer file.Close() reader := bufio.NewReader(file) var line []byte for { data, prefix, err := reader.ReadLine() if err == io.EOF { break } line = append(line, data...) if !prefix { fmt.Printf("data:%s\n", string(line)) line = line[:] } } }
读取整个文件栗子"io/ioutil" 包实现了读取整个文件功能 package main import ( "fmt" "os" "io/ioutil" ) func main() { fileName := "/tmp/test" file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0666) if err != nil { fmt.Println("Open file error: ", err) return } defer file.Close() buf, err := ioutil.ReadAll(file) //buf, err := ioutil.ReadFile(fileName) if err != nil { fmt.Fprintf(os.Stderr, "File Error: %s\n", err) return } fmt.Printf("%s\n", string(buf)) }
读取压缩文件栗子"compress/*" 包实现压缩文件功能。 "compress/gzip" 包实现了gzip格式压缩文件的读写 package main import ( "bufio" "compress/gzip" "fmt" "os" ) func main() { fileName := "/tmp/test.log.gz" var r *bufio.Reader fi, err := os.Open(fileName) if err != nil { fmt.Println("error", err) os.Exit(1) } fz, err := gzip.NewReader(fi) if err != nil { fmt.Println("error", err) return } r = bufio.NewReader(fz) for { line, err := r.ReadString('\n') if err != nil { fmt.Println("Done reading file") return } fmt.Println(line) } }
文件写入file.WriteString || file.Writepackage main import ( "fmt" "os" ) func main() { fileName := "/tmp/test_write" file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0755) if err != nil { fmt.Println("error", err) os.Exit(1) } defer file.Close() fileString := "Today very happy." file.Seek(0, 2) // 最后增加 file.WriteString(fileString) //file.Write([]byte(fileString)) }
bufio.Writer.WriteString带缓冲的写,最后要将缓冲中的数据写入下层的io.Writer接口(Flush方法) package main import ( "bufio" "fmt" "os" ) func main() { fileName := "/tmp/test_write" file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0755) if err != nil { fmt.Println("error", err) os.Exit(1) } defer file.Close() fileWrite := bufio.NewWriter(file) fileString := "good.\n" for i := 0; i < 10; i++ { fileWrite.WriteString(fileString) } fileWrite.Flush() }
拷贝文件栗子从一个文件拷贝到另一个文件 package main import ( "fmt" "io" "os" ) func CopyFile(dstName, srcName string) (writeen int64, err error) { src, err := os.Open(dstName) if err != nil { fmt.Println(err) return } defer src.Close() dst, err := os.OpenFile(srcName, os.O_CREATE|os.O_WRONLY, 0644) if err != nil { fmt.Println(err) return } defer dst.Close() return io.Copy(dst, src) } func main() { CopyFile("/tmp/test", "/tmp/test_copy1") fmt.Println("copy done.") }
栗子判断文件或文件夹是否存在func PathExists(path string) (bool, error) { /* 判断文件或文件夹是否存在 如果返回的错误为nil,说明文件或文件夹存在 如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在 如果返回的错误为其它类型,则不确定是否在存在 */ _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err }
|
请发表评论