当前位置 : 主页 > 编程语言 > 其它开发 >

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

来源:互联网 收集:自由互联 发布时间:2022-07-12
文件操作 打开和关闭文件 os.Open()函数打开一个文件 返回一个*File和一个err 对得到的文件实例调用close()方法关闭文件 读取文件 file.Read() bufio读取文件 ioutil读取整个文件 package mainimpor

文件操作

打开和关闭文件

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()
}
网友评论