Skip to content
On this page

写文件

常规写

Go
func (f *File) WriteString(s string) (n int, err error)

func (f *File) Write(b []byte) (n int, err error) 

代码示例

Go
// 常规写入
func demo1() {
	// 如果文件不存在就创建并写入内容
	file, err := os.OpenFile("2.txt", os.O_CREATE|os.O_RDWR, 0666)
	defer file.Close()
	if err != nil {
		fmt.Println("os.OpenFile err", err)
		return
	}
	// func (f *File) WriteString(s string) (n int, err error)
	n, err := file.WriteString("树倒猢狲散\n")
	// func (f *File) Write(b []byte) (n int, err error) 
	n, err = file.Write([]byte("啊是, 卡手机报价"))
	if err != nil {
		fmt.Println("file write err", err)
		return
	}
	fmt.Println(n)
}
func main() {
	demo1()
}

快速写

Go
func WriteFile(name string, data []byte, perm FileMode)

代码示例

Go
// 快速写
func demo2() {
	// func WriteFile(name string, data []byte, perm FileMode)
	err := os.WriteFile("3.txt", []byte("齐天大圣孙悟空,hello"), 0666)
	if err != nil {
		fmt.Println("os.WriteFile", err)
		return
	}	
}
func main() {
	demo2()
}

带缓冲写

  • 一般用于大文件
Go
// 带缓冲写,一般用于大文件
func demo3() {
	file, err := os.OpenFile("5.txt", os.O_CREATE|os.O_RDWR, 0666)
	defer file.Close()
	if err != nil {
		fmt.Println("os.OpenFile err", err)
		return
	}
	buf := bufio.NewWriter(file)
	for i := 0; i <= 5; i++ {
		buf.WriteString("go语言学习go go go\n")
	}
	buf.Flush()
}

func main() {
	demo3()
}

读取文件并写入另一个文件中

  • 下面的例子是读取一个图片并写入另一张图片中
Go
func binaryFileOperation() {
	// 打开1.jpg文件
	imgFile, imgErr := os.OpenFile("1.jpg", os.O_RDONLY, 0777)
	defer imgFile.Close() // 读取结束后,需要关闭文件
	if imgErr != nil {
		fmt.Println("open img file err", imgErr)
		return
	}
	copyImgFile, copyImgErr := os.OpenFile("fengjing.jpg", os.O_CREATE|os.O_RDWR, 0666)
	if copyImgErr != nil {
		fmt.Println("open copyImgFile err", imgErr)
		return
	}
	reader := bufio.NewReader(imgFile)
	writer := bufio.NewWriter(copyImgFile)
	defer copyImgFile.Close()
	for {
		byte, err := reader.ReadByte() // 按字节读取
		if err == io.EOF {
			fmt.Println("======读取完毕======")
			break
		}
		writer.WriteByte(byte)
	}
	writer.Flush()
}

func main() {
	binaryFileOperation()
}

或者下面的方法也能实现

Go
func binaryFileOperation2() {
	readFile, err := os.ReadFile("1.jpg")
	if err != nil {
		fmt.Println("open readFile err", err)
		return
	}
	writeErr := os.WriteFile("write.jpg", readFile, 0666)
	if writeErr != nil {
		fmt.Println("open writeFile err", writeErr)
		return
	}
	fmt.Println("文件读取完毕")
}

func main() {
	binaryFileOperation2()
}