分享
  1. 首页
  2. 文章

golang中关于文件的操作

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

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏