Go---文件操作

284 阅读1分钟

读取文件

读取文件有多种方法,如

1--os.Open()

func readMethod1() {
	// 文件路径
	path := "./main.go"
	// 获取文件句柄
	f, err := os.Open(path)
	if err != nil {
		fmt.Println("文件打开异常")
		return
	}
	// 延迟处理,确保能关闭句柄
	defer f.Close()
	// 声明一个存储文件内容的字符型切片
	text := make([]byte, 256)
	for {
		n, err := f.Read(text)
		if err == io.EOF {
			// 文件读取完毕
			return
		}
		if err != nil {
			fmt.Printf("文件读取异常%v\n", err)
			return
		}
		// 将读取到的内容输出
		fmt.Print(string(text[:n]))
		if n < 256 {
			// 读取完毕
			return
		}
	}
}

2--bufio.NewReader()

func readMethod2() {
	// 文件路径
	path := "./main.go"
	f, err := os.Open(path)
	if err != nil {
		fmt.Println("文件打开异常")
		return
	}
	// 延迟处理,确保能关闭句柄
	defer f.Close()
	rw := bufio.NewReader(f)
	for {
		s, err2 := rw.ReadString('\n')
		if err2 == io.EOF {
			// 文件读取完毕
			return
		}
		if err != nil {
			fmt.Printf("文件读取异常%v\n", err)
			return
		}
		// 将读取到的内容输出
		fmt.Print(s)
	}
}

3--ioutil.ReadFile()

func readMethod3() {
	path := "./main.go"
	// 读取文件
	b, err := ioutil.ReadFile(path)
	if err != nil {
		fmt.Printf("文件打开异常:%v\n", err)
		return
	}
	// 输出数据
	fmt.Println(string(b))
}

写入文件

1--os.OpenFile()

func writeMethod1() {
	// 文件路径
	path := "./myFile.txt"
	// 获取文件句柄
	f, err := os.OpenFile(path, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0)
	if err != nil {
		fmt.Println("文件打开异常")
		return
	}
	// 延迟处理,确保能关闭句柄
	defer f.Close()
	// 写入数据
	str := "测试写入数据"
	_, err2 := f.WriteString(str)
	if err2 != nil {
		fmt.Println("文件写入异常")
		return
	}
}

2--bufio.NewWriter()

func writeMethod2() {
	// 文件路径
	path := "./myFile.txt"
	// 获取文件句柄
	f, err := os.OpenFile(path, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0)
	if err != nil {
		fmt.Println("文件打开异常")
		return
	}
	// 延迟处理,确保能关闭句柄
	defer f.Close()
	// 写入数据
	str := "测试写入数据"
	w := bufio.NewWriter(f)
	_, err2 := w.WriteString(str)
	if err2 != nil {
		fmt.Printf("文件写入异常:%v", err)
		return
	}
	// 刷新缓冲区
	w.Flush()
}

3--ioutil.WriteFile()

func writeMethod3() {
	// 文件路径
	path := "./myFile.txt"
	// 写入数据
	str := "测试写入数据666"
	err := ioutil.WriteFile(path, []byte(str), fs.ModeAppend)
	if err != nil {
		fmt.Printf("写入文件异常:%v", err)
		return
	}
}