golang中关于文件的操作

ST_MT · · 656 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1、读取文件(3种方法)

一、读取文件(方法1):

1、只读方式打开文件 file,err := os.Open()
2、读取文件 file.Read()
3、关闭文件流 defer file.Close()

二、读取文件(方法2)bufio 读取文件

1、只读方式打开文件 file,err := os.Open()
2、创建reader对象  reader := bufio.NewReader(file)
3、ReadString读取文件  line, err := reader.ReadString('\n')
4、关闭文件流 defer file.Close()

三、读取文件(方法3)ioutil 读取文件

打开关闭文件的方法它都封装好了只需要一句话就可以读取
ioutil.ReadFile("./main.go")

2、写入文件(3种方法)

一、写入文件(方法1)

1、打开文件  file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
2、写入文件
      file.Write([]byte(str))        //写入字节切片数据
      file.WriteString("直接写入的字符串数据") //直接写入字符串数据
3、关闭文件流 file.Close()

二、写入文件(方法2) bufio 写入文件

1、打开文件  file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
2、创建writer对象  writer := bufio.NewWriter(file)
3、将数据先写入缓存  writer.WriteString("你好golang\r\n")
4、将缓存中的内容写入文件   writer.Flush()
5、关闭文件流 file.Close()

三、写入文件(方法3) ioutil 写入文件

str := "hello golang"
err := ioutil.WriteFile("C:/test.txt", []byte(str), 0666)

3、文件重命名

err := os.Rename("C:/test1.txt", "D:/test1.txt") //只能同盘操作

4、复制文件

一、方法1

input, err := ioutil.ReadFile(srcFileName)
err = ioutil.WriteFile(dstFileName, input, 0644)

二、方法2

source, _ := os.Open(srcFileName)
destination, _ := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
n, err := source.Read(buf)
destination.Write(buf[:n]);

5创建目录

err := os.Mkdir("./abc", 0666)
err := os.MkdirAll("dir1/dir2/dir3", 0666) //创建多级目录

6、删除目录和文件

err := os.Remove("t.txt")
err := os.RemoveAll("aaa")

7、实现源码案例如下:

  • 读取文件1
package main
import (
    "fmt"
    "io"
    "os"
)
/*
    一、读取文件(方法1)
        1、只读方式打开文件 file,err := os.Open()
        2、读取文件 file.Read()
        3、关闭文件流 defer file.Close()
*/
func main() {
    //1、打开文件
    file, err := os.Open("./1文件操作.go")
    defer file.Close()

    if err != nil {
        fmt.Println(err)
        return
    }
    //2、读取文件里面的内容
    var strSlice []byte
    var tempSlice = make([]byte, 128)
    for {
        n, err := file.Read(tempSlice)
        if err == io.EOF { //err==io.EOF表示读取完毕
            fmt.Println("读取完毕")
            break
        }
        if err != nil {
            fmt.Println("读取失败")
            return
        }
        // fmt.Printf("读取到了%v个字节\n", n)
        strSlice = append(strSlice, tempSlice[:n]...) //注意写法
    }
    fmt.Println(string(strSlice))
}
  • 读取文件2
package main
import (
    "bufio"
    "fmt"
    "io"
    "os"
)

/*
 二、读取文件(方法2)bufio 读取文件
         1、只读方式打开文件 file,err := os.Open()
         2、创建reader对象  reader := bufio.NewReader(file)
         3、ReadString读取文件  line, err := reader.ReadString('\n')
         4、关闭文件流 defer file.Close()
*/
func main() {
    file, err := os.Open("C:/test.txt")
    defer file.Close()

    if err != nil {
        fmt.Println(err)
        return
    }
    //bufio 读取文件
    var fileStr string
    reader := bufio.NewReader(file)
    for {
        str, err := reader.ReadString('\n') //表示一次读取以行
        if err == io.EOF {
            fileStr += str
            break
        }
        if err != nil {
            fmt.Println(err)
            return
        }
        fileStr += str
    }
    fmt.Println(fileStr)
}
  • 读取文件3
package main
import (
    "fmt"
    "io/ioutil"
)
// ioutil按行读取示例
func main() {
    byteStr, err := ioutil.ReadFile("C:/test.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(byteStr))
}

  • 文件写入1
package main
import (
    "fmt"
    "os"
)

/*
    一、写入文件(方法1)
        1、打开文件  file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
        2、写入文件
            file.Write([]byte(str))        //写入字节切片数据
            file.WriteString("直接写入的字符串数据") //直接写入字符串数据
        3、关闭文件流 file.Close()
*/
func main() {
    file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    defer file.Close()

    if err != nil {
        fmt.Println(err)
        return
    }
    //写如文件
    // for i := 0; i < 10; i++ {
    //  file.WriteString("直接写入的字符串数据" + strconv.Itoa(i) + "\r\n")
    // }
    var str = "直接写入的字符串数据byte"
    file.Write([]byte(str))
}
  • 文件写入2
package main
import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)
/*
 二、写入文件(方法2) bufio 写入文件
         1、打开文件  file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
         2、创建writer对象  writer := bufio.NewWriter(file)
         3、将数据先写入缓存  writer.WriteString("你好golang\r\n")
         4、将缓存中的内容写入文件  writer.Flush()
         5、关闭文件流 file.Close()
*/
func main() {
    file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
    defer file.Close()

    if err != nil {
        fmt.Println("open file failed, err:", err)
        return
    }
    writer := bufio.NewWriter(file)

    // writer.WriteString("你好golang") //将数据先写入缓存

    for i := 0; i < 10; i++ {
        writer.WriteString("直接写入的字符串数据" + strconv.Itoa(i) + "\r\n")
    }
    writer.Flush() //将缓存中的内容写入文件

}
  • 文件写入3
package main
import (
    "fmt"
    "io/ioutil"
)
func main() {
    str := "hello golang"
    err := ioutil.WriteFile("C:/test.txt", []byte(str), 0666)
    if err != nil {
        fmt.Println("write file failed, err:", err)
        return
    }
}

-文件目录删除、创建、重命名看上面介绍。。。。

觉得有帮助,帮忙点个赞,关注共同学习!!1


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:ST_MT

查看原文:golang中关于文件的操作

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

656 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传