使用go语言来进行文件操作

1. 新建文件并向文件中写入

package main

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

func main(){
	// 先打开一个文件
	filePath := "C:/Users/Administrator/Pictures/xiong.txt"
	file,err := os.OpenFile(filePath,os.O_WRONLY | os.O_CREATE,0666)
	if err != nil{
		fmt.Printf("打开文件错误!",err)
		return
	}
	// 写入hello
	defer file.Close()
	str := "hello,xiong\n"
	writer := bufio.NewWriter(file)
	for i := 0;i<5;i++{
		writer.WriteString(str)
	}
	// 因为writer是带缓存的 所以需要将缓存的内容写到文件中
	writer.Flush()

}

2. 读取文件中内容

一、没有缓存区的方式进行

package main

import(
	"fmt"
	"io/ioutil"
	"log"
)

func main(){
	// 使用ioutil.ReadFile 一次性读取 打开和关闭都已经被封装了
	file := "C:/Users/Administrator/Pictures/xiong.jpg"
	content,err := ioutil.ReadFile(file)
	if err != nil{
		log.Fatal("读取错误!")
	}
	fmt.Printf("content:%v",content) // []byte 

}

二、直接进行读取

package main

import(
	"fmt"
	"bufio"
	"io"
	"os"
)
// 适合文件比较大的情况

func main(){
	file,err := os.Open("C:/Users/Administrator/Pictures/xiong.jpg")
	if err != nil{
		fmt.Println("open file err=",err)
	}
	// 当函数退出时 关闭文件,否则会有内存泄漏
	defer file.Close()
	// 创建一个*reader,是带缓冲区的 默认的缓冲区大小是4096个字节
	reader := bufio.NewReader(file)
	for{
		str,err := reader.ReadString('\n')
		if err == io.EOF{ // 表示读取到文件的末尾了
			break
		}
		// if err != nil{
		// 	fmt.Println("err",err)
		// }
		fmt.Print(str)
	}
	fmt.Println("文件读取结束!!")
}	

3. 将文件中清空后再写入

package main

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

func main(){
	// 先打开一个文件
	filePath := "C:/Users/Administrator/Pictures/xiong.txt"
	file,err := os.OpenFile(filePath,os.O_WRONLY | os.O_TRUNC,0666) // 清空
	if err != nil{
		fmt.Printf("打开文件错误!",err)
		return
	}
	// 写入hello
	defer file.Close()
	str := "你好,熊\n"
	writer := bufio.NewWriter(file)
	for i := 0;i<10;i++{
		writer.WriteString(str)
	}
	// 因为writer是带缓存的 所以需要将缓存的内容写到文件中
	writer.Flush()


}

4. 在原来的内容上追加

package main

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

func main(){
	// 先打开一个文件
	filePath := "C:/Users/Administrator/Pictures/xiong.txt"
	file,err := os.OpenFile(filePath,os.O_WRONLY | os.O_APPEND,0666) // 清空
	if err != nil{
		fmt.Printf("打开文件错误!",err)
		return
	}
	// 写入hello
	defer file.Close()
	str := "LIYUYUAN\n"
	writer := bufio.NewWriter(file)
	for i := 0;i<10;i++{
		writer.WriteString(str)
	}
	// 因为writer是带缓存的 所以需要将缓存的内容写到文件中
	writer.Flush()


}

5. 读写和追加同时进行

package main

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

func main(){
	// 先打开一个文件
	filePath := "C:/Users/Administrator/Pictures/xiong.txt"
	file,err := os.OpenFile(filePath,os.O_RDWR | os.O_APPEND,0666) // 清空
	if err != nil{
		fmt.Printf("打开文件错误!",err)
		return
	}
	// 读取原来的内容
	reader := bufio.NewReader(file)
	for{
		str,err := reader.ReadString('\n')
		if err == io.EOF{
			break
		}
		// 显示到终端
		fmt.Print(str)
	}

	// 写入hello
	defer file.Close()
	str := "haha\n"
	writer := bufio.NewWriter(file)
	for i := 0;i<10;i++{
		writer.WriteString(str)
	}
	// 因为writer是带缓存的 所以需要将缓存的内容写到文件中
	writer.Flush()


}

6. 文件copy

// copy文件
package main

import(
	"fmt"
	"os"
	"bufio"
	"io"
)
// 自己编写一个函数 接受两个文件路径  srcFileName(源文件) dstFileName(目标文件)
func CopyFile(dstFileName string, srcFileName string)(written int64,err error){
	srcfile,err := os.Open(srcFileName)
	if err != nil{
		fmt.Printf("open file err=%v\n",err)
	}
	// 在函数结束时关闭两个句柄
	defer srcfile.Close()
	
	// 通过srcfile,获取到Reader
	reader := bufio.NewReader(srcfile)
	// 打开dstFileName
	dstfile,err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE,0666)
	if err != nil{
		fmt.Printf("open file err=%v",err)
		return
	}
	// 获取到writer
	writer := bufio.NewWriter(dstfile)
	defer dstfile.Close()
	return io.Copy(writer,reader)


}

func main(){
	// 将图片拷贝到另一个文件中
	srcFile := "C:/Users/Administrator/Pictures/xiong.jpg"
	dstFile := "C:/Users/Administrator/Pictures/xiong3.jpg"
	_,err := CopyFile(dstFile,srcFile)
	if err != nil{
		fmt.Println("copy出错!")
	}

}
发布了16 篇原创文章 · 获赞 0 · 访问量 296

猜你喜欢

转载自blog.csdn.net/xionglaine/article/details/104222446