golang文件操作之三个包

golang  

使用 os包 进行指定字节读取文件

  • 1.读取操作
    1. // 打开指定路劲的文件, 得到 file指针结构体 和 err
    2. fileObj, err := os.Open("./main.go")
    3. if err != nil {
    4. fmt.Printf("open file failed, err:%v", err)
    5. return
    6. }
    7. // 关闭文件 defer 是在函数结束前进行调用
    8. defer fileObj.Close()
    9. // 读取文件
    10. // 定义一个 长度为128个字节的变量数组
    11. var content [128]byte
    12. for {
    13. // Read需要传入切片
    14. n, err := fileObj.Read(content[:])
    15. if err == io.EOF {
    16. // io 结束符号
    17. fmt.Printf("读完了 \n")
    18. return
    19. }
    20. if err != nil {
    21. fmt.Printf("read from file failed, err:%v", err)
    22. return
    23. }
    24. fmt.Printf("读取了%d个字节 \n", n)
    25. fmt.Println(string(content[:n]))
    26. }
  • 2.写入操作

    1. // 打开文件,没有则新建并设置每次清空写入,权限 0644
    2. file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0644)
    3. if err != nil {
    4. fmt.Println("open file failed, err: %v", err)
    5. }
    6. defer file.Close()
    7. // 设置写入内容
    8. str := "你好,这个是一个 os 文件写入示例"
    9. // 1.将内容转换成字节切片
    10. byteSlice := []byte(str)
    11. // 写入文件
    12. n, _ := file.Write(byteSlice)
    13. fmt.Println(n)
    14. // 2.直接写入字符串数据
    15. str += "; 我是字符串"
    16. file.WriteString(str)

使用ioutil包进行全部内容读取

  • 1.读取操作

    1. content1, err := ioutil.ReadFile("./main.go")
    2. if err != nil {
    3. fmt.Printf("ioutil failed err:%v", err)
    4. return
    5. }
    6. fmt.Println(string(content1))
  • 2.写入操作

    1. str := "hello , 我是ioutil"
    2. err := ioutil.WriteFile("./test1.txt", []byte(str), 0644)
    3. if err != nil {
    4. fmt.Printf("write file failed,err:%v", err)
    5. return
    6. }

使用bufio包进行逐行读取

  • 1.读取操作

    1. fileObj, err := os.Open("./main.go")
    2. if err != nil {
    3. fmt.Printf("open file failde, err:%v", err)
    4. return
    5. }
    6. defer fileObj.Close()
    7. reader := bufio.NewReader(fileObj)
    8. for {
    9. line, err := reader.ReadString('\n')
    10. if err == io.EOF {
    11. fmt.Printf("eof \n")
    12. return
    13. }
    14. if err != nil {
    15. fmt.Printf("read line failed, err:%v", err)
    16. return
    17. }
    18. fmt.Printf("%v", line)
    19. }
  • 2.写入操作

    1. file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0644)
    2. if err != nil {
    3. fmt.Printf("open file failed,err:%v", err)
    4. return
    5. }
    6. defer file.Close()
    7. writer := bufio.NewWriter(file)
    8. for i := 0; i < 10; i++ {
    9. writer.WriteString("hello, 我是 bufio \n") // 将数据写入缓存
    10. }
    11. writer.Flush() // 将缓存中的内容写入文件

    使用io.Copy实现拷贝函数

    1. func copyFile(dstName, srcName string) (written int64, err error) {
    2. // 以读取方式打开源文件
    3. src, err := os.Open(srcName)
    4. if err != nil {
    5. fmt.Printf("open %s failed, err:%v . \n", srcName, err)
    6. return
    7. }
    8. defer src.Close()
    9. // 以写|创建的方式打开目标文件
    10. dst, err := os.OpenFile(dstName, os.O_CREATE|os.O_WRONLY, 0644)
    11. if err != nil {
    12. fmt.Printf("open %s failed,err: %v . \n", dstName, err)
    13. return
    14. }
    15. defer dst.Close()
    16. return io.Copy(dst, src) // 拷贝内容
    17. }
    18. func main() {
    19. _, err := copyFile("dst.txt", "test.txt")
    20. if err != nil {
    21. fmt.Println("copy file failed ,err:", err)
    22. return
    23. }
    24. fmt.Println("copy done!")
    25. }


评论 0

发表评论

Top