Go 文件操作
Posted s686zhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 文件操作相关的知识,希望对你有一定的参考价值。
文件分为文本文件 和 二进制文件
打开和关闭文件
os.Open() 函数能够打开一个文件,返回一个 *File 和一个 err。对得到的文件实例调用 close() 方法能够关闭文件。
package main import ( "fmt" "os" ) func main(){ // 只读方式打开当前目录下的 main.go 文件 file, err := os.Open("./main.go") if err != nil { fmt.Println("open file failed!,err:",err) return } // 关闭文件 defer file.Close() //为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句。 }
读取文件
file.Read()
基本使用
Read方法定义如下:
func (f *File) Read(b []byte) (n int, err error)
循环读取
func main(){ // 只读方式打开当前目录下的main.go 文件 file, err := os.Open("./main.go") if err != nil{ fmt.Prinln("Open file failed!,err:",err) return } defer file.Close() // 循环读取文件 var content []byte var tmp = make([]byte,128) for { n, err := file.Read(tmp) if err == io.EOF { fmt.Prinln("文件读完了") break } if err != nil{ fmt.Println("read file failed,err:",err) return } content = append(content,tmp[:n]...) } fmt.Prinln(string(content)) }
bufio读取文件
bufio是在file的基础上封装了一层API,支持更多的功能。
package main import ( "bufio" "fmt" "io" "os" ) // bufio按行读取示例 func main() { file, err := os.Open("./xx.txt") if err != nil { fmt.Prinln("open file failed, err:",err) return } defer file.Close() reader := bufio.NewReader(file) for { line, err := reader.ReadString(‘ ‘) //注意是字符 if err == io.EOF { if len(line) != 0{ fmt.Prinln(line) } fmt.Println("文件读完了") break } if err != nil { fmt.Println("read file failed, err:",err) return } fmt.Print(line) } }
ioutil读取整个文件
io/ioutil 包的 ReadFile 方法能够读取完整的文件,只需要将文件名作为参数传入。
package main import ( "fmt" "io/ioutil" ) // ioutil.ReadFile 读取整个文件 func main() { content, err := ioutil.ReadFile("./main.go") if err != nil { fmt.Println("read file failed, err:",err) return } fmt.Println(string(content)) }
文件写入操作
os.OpenFile() 函数能够以指定模式打开文件,从而实现文件写入相关功能。
func OpenFile(name string, flag int, perm FileMode) (*File,error){ ... }
其中:
name: 要开打的文件名 flag : 打开文件的模式。 模式有以下几种:
os.O_WRONLY 只写
os.O_CREATE 创建文件
os.O_RDONLY 只读
os.O_RDWR 读写
os.O_TRUNC 清空
os.O_APPEND 追加
perm: 文件权限,一个八进制数。 r(读) 04, w (写) 02 , x(执行) 01。
Write 和 WriteString
func main() { file, err := os.OpenFile("xx.txt",os.O_CREATE|os.O_TRUNC|os.O_WRONLY,0666) if err != nil { fmt.Prinln("open file failed,err:",err) return } defer file.Close() str := "hello 沙河" file.Write([]byte(str)) //写入字节切片数据 file.WriteString("hello 小王子") //直接写入字符串数据 }
buffio.NewWriter
func main() { file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { fmt.Println("open file failed, err:", err) return } defer file.Close() writer := bufio.NewWriter(file) for i := 0; i < 10; i++ { writer.WriteString("hello沙河 ") //将数据先写入缓存 } writer.Flush() //将缓存中的内容写入文件 }
ioutil.WriteFile
func main() { str := "hello 沙河" err := ioutil.WriteFile("./xx.txt",[]byte(str),0666) if err != nil { fmt.Prinln(‘write file failed,err:",err) return } }
以上是关于Go 文件操作的主要内容,如果未能解决你的问题,请参考以下文章
npm : 无法加载文件 D:softcodeProcess ode ode_global pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +(代码片段
解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段