GO语言学习——文件操作(读取和写入)

文件操作

打开和关闭文件

os.Open()函数打开一个文件

返回一个*File和一个err

对得到的文件实例调用close()方法关闭文件

读取文件

file.Read()

bufio读取文件

ioutil读取整个文件

package main

import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)

// 打开文件

func readFormFile1() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 读文件
// var tmp = make([]byte, 128) // 指定读的长度
var tmp [128]byte
for {
n, err := fileObj.Read(tmp[:])
if err == io.EOF {
fmt.Println("读完了")
return
}
if err != nil {
fmt.Printf("read from file failed, err:%v\n", err)
return
}
fmt.Printf("读了%d个字节\n", n)
fmt.Println(string(tmp[:n]))
if n < 128 {
return
}
}
}

// 利用bufio这个包读取文件
func readFormFilebyBufio() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 创建一个用来从文件中读内容的对象
reader := bufio.NewReader(fileObj)
for {
line, err := reader.ReadString('\n') //注意是字符
if err == io.EOF {
if len(line) != 0 {
fmt.Println(line)
}
fmt.Println("文件读完了")
break
}
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Print(line)
}
}

// ioutil读取整个文件
func readFormFileByIoutil() {
content, err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Println(string(content))
}

func main() {
// readFormFile1()
// readFormFilebyBufio()
readFormFileByIoutil()
}
package main

import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)

// 打开文件

func readFormFile1() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 读文件
// var tmp = make([]byte, 128) // 指定读的长度
var tmp [128]byte
for {
n, err := fileObj.Read(tmp[:])
if err == io.EOF {
fmt.Println("读完了")
return
}
if err != nil {
fmt.Printf("read from file failed, err:%v\n", err)
return
}
fmt.Printf("读了%d个字节\n", n)
fmt.Println(string(tmp[:n]))
if n < 128 {
return
}
}
}

// 利用bufio这个包读取文件
func readFormFilebyBufio() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 创建一个用来从文件中读内容的对象
reader := bufio.NewReader(fileObj)
for {
line, err := reader.ReadString('\n') //注意是字符
if err == io.EOF {
if len(line) != 0 {
fmt.Println(line)
}
fmt.Println("文件读完了")
break
}
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Print(line)
}
}

// ioutil读取整个文件
func readFormFileByIoutil() {
content, err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Println(string(content))
}

func main() {
// readFormFile1()
// readFormFilebyBufio()
readFormFileByIoutil()
}

文件写入操作

Write和WriteString

bufio.NewWriter

ioutil.WriteFile

package main

import (
"bufio"
"fmt"
"io/ioutil"
"os"
)

// 打开文件写内容

func writeDemo1() {
fileObj, 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 fileObj.Close()
// write
str := "吹尽狂沙始到金\n"
fileObj.Write([]byte(str)) //写入字节切片数据
fileObj.WriteString("学而不思则罔") //直接写入字符串数据
}

// bufio.NewWriter
func writeDemo2() {
fileObj, 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 fileObj.Close()
// 创建一个写的对象
writer := bufio.NewWriter(fileObj)
for i := 0; i < 10; i++ {
writer.WriteString("天降大任于斯人也\n") //将数据先写入缓存
}
writer.Flush() //将缓存中的内容写入文件
}

// ioutil.WriteFile
func writeDemo3() {
str := "圣人以治天下为事者也,必知乱之所自起,焉能治之;不知乱之所自起,则不能治。"
err := ioutil.WriteFile("./xx.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file failed, err:", err)
return
}
}

func main() {
// writeDemo1()
// writeDemo2()
writeDemo3()
}

二进制实用途

package main

import "fmt"

// 二进制实用途

const (
eat int = 4
sleep int = 2
da int = 1
)

// 111
// 左边的1表示吃饭 100
// 中间的1表示睡觉 010
// 右边的1表示打豆豆 001

func f(arg int) {
fmt.Printf("%b\n", arg)
}

func main() {
f(eat | da) // 101
f(eat | sleep | da) // 111
}

获取用户输入时如果有空格的处理

package main

import (
"bufio"
"fmt"
"os"
)

// 获取用户输入时如果有空格

func useScan() {
var s string
fmt.Print("请输入内容:")
fmt.Scanln(&s)
fmt.Printf("您输入的内容是:%s\n", s)
}

func useBufio() {
var s string
reader := bufio.NewReader(os.Stdin) // NewReader的参数就是接口类型
fmt.Print("请输入内容:")
s, _ = reader.ReadString('\n')
fmt.Printf("您输入的内容是:%s\n", s)
}

func main() {
// useScan()
useBufio()
}

posted @ 2022-07-10 21:14  寻月隐君  阅读(391)  评论(0)    收藏  举报