使用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出错!")
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值