【Go】十六、文件操作

- 日理万妓 2024-04-23 15:44 161阅读 0赞

文章目录

  • 1、打开和关闭文件
  • 2、IO
  • 3、一次性读文件
  • 4、带缓冲区的读文件
  • 5、写入文件
  • 6、文件复制

1、打开和关闭文件

  1. package main
  2. import(
  3. "fmt"
  4. "os"
  5. )
  6. func main(){
  7. //打开文件:
  8. file,err := os.Open("d:/Test.txt");
  9. if err != nil {
  10. //出错
  11. fmt.Println("文件打开出错,对应错误为:",err)
  12. }
  13. //没有出错,输出文件:
  14. fmt.Printf("文件=%v",file)
  15. //.........一系列操作
  16. //关闭文件:
  17. err2 := file.Close();
  18. if err2 != nil {
  19. fmt.Println("关闭失败")
  20. }
  21. }

相关:

  • 打开文件,打开成功则返回一个文件对象

    //函数
    func Open(name string)(file *File,err error)

  • 关闭文件,使文件不能用于读写,返回可能出现的错误

    //方法,限File对象调用
    func(f *File) Close() error

2、IO

在这里插入图片描述

3、一次性读文件

在这里插入图片描述

  • 使用ioutil包的ReadFile方法,将整个文件读入到内存
  • 不适合大文件

    package main
    import(

    1. "fmt"
    2. "io/ioutil"

    )
    func main(){

    1. //读取文件:
    2. content,err := ioutil.ReadFile("d:/Test.txt")//返回内容为:[]byte,err
    3. if err != nil {
    4. //读取有误
    5. fmt.Println("读取出错,错误为:",err)
    6. }
    7. //如果读取成功,将内容显示在终端即可:
    8. //fmt.Printf("%v",content)
    9. fmt.Printf("%v",string(content))

    }

在上面的程序中不需要进行 Open\Close操作,因为文件的打开和关闭操作被封装在ReadFile函数内部了

4、带缓冲区的读文件

  • 带缓冲区
  • 适合读大文件

    package main
    import(

    1. "fmt"
    2. "os"
    3. "bufio"
    4. "io"

    )
    func main(){

    1. //打开文件:
    2. file,err := os.Open("d:/Test.txt")
    3. if err != nil {
    4. //打开失败
    5. fmt.Println("文件打开失败,err=",err)
    6. }
    7. //当函数退出时,让file关闭,防止内存泄露:
    8. defer file.Close()
    9. //创建一个流:
    10. reader := bufio.NewReader(file)
    11. //读取操作:
    12. for {
    13. str,err := reader.ReadString('\n')//读取到一个换行就结束
    14. if err == io.EOF {
    15. //io.EOF 表示已经读取到文件的结尾
    16. break
    17. }
    18. //如果没有读取到文件结尾的话,就正常输出文件内容即可:
    19. fmt.Println(str)
    20. }
    21. //结束:
    22. fmt.Println("文件读取成功,并且全部读取完毕")

    }

5、写入文件

打开文件:
在这里插入图片描述

  • 参数一:文件路径
  • 参数二:文件打开模式,多选用 | 连接
    在这里插入图片描述
  • 参数三:权限控制(Linux下生效,Windows无效)

示例:

  1. package main
  2. import(
  3. "fmt"
  4. "os"
  5. "bufio"
  6. )
  7. func main(){
  8. //写入文件操作:
  9. //打开文件:
  10. file , err := os.OpenFile("d:/Demo.txt",os.O_RDWR | os.O_APPEND | os.O_CREATE,0666)
  11. if err != nil {
  12. //文件打开失败
  13. fmt.Printf("打开文件失败",err)
  14. return
  15. }
  16. //及时将文件关闭:
  17. defer file.Close()
  18. //写入文件操作:---》IO流---》缓冲输出流(带缓冲区)
  19. writer := bufio.NewWriter(file)
  20. for i := 0; i < 10;i++ {
  21. writer.WriteString("你好 Golang\n")
  22. }
  23. //流带缓冲区,要刷新流--->才会真正写入文件中:
  24. writer.Flush()
  25. }

关于权限,不想算可以:

  1. s :=os.FileMode(0666).String()
  2. fmt.Println(s)

6、文件复制

  1. package main
  2. import(
  3. "fmt"
  4. "io/ioutil"
  5. )
  6. func main(){
  7. //定义源文件:
  8. file1Path := "d:/Demo.txt"
  9. //定义目标文件:
  10. file2Path := "d:/Demo2.txt"
  11. //对文件进行读取:
  12. content,err := ioutil.ReadFile(file1Path)
  13. if err != nil {
  14. fmt.Println("读取有问题!")
  15. return
  16. }
  17. //写出文件:
  18. err = ioutil.WriteFile(file2Path,content,0666)
  19. if err != nil {
  20. fmt.Println("写出失败!")
  21. }
  22. }

发表评论

表情:
评论列表 (有 0 条评论,161人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Go、函数

    语法:注意点:示例:无返回值:多个返回值:多个返回值,但只接收一个返回值,用_忽略:,调函数修改,不会影响原来的值在Go中,函数也是一种数据类型,可以赋值给一个变量,则该...