Golang中文本文件的处理,包括文件创建、写入数据、读取文件,最后还有一个模拟文件备份的案例。
文件创建
func main(){
//创建文件,需要指定文件的存储路径以及文件名称,注意“/”
file,err := os.Create("C:/Test/a.txt")
//判读是否出现异常
if err != nil{
fmt.Println(err)
//file.Close()//不论是否出错
}
defer file.Close()
//对创建的文件进行相关的操作
//关闭
//file.Close()
}
写入数据WriteString方法
string类型
func main(){
file,err := os.Create("c:/Test/b.txt")
if err != nil{
fmt.Println(err)
}
defer file.Close()
//写入数据
n,err := file.WriteString("Hello World")//n代表数据长度
if err != nil{
fmt.Println(err)
}
fmt.Println(n)
}
写入数据Write方法
[]byte类型
func main(){
file,err := os.Create("c:/Test/c.txt")
if err != nil{
fmt.Println(err)
}
defer file.Close()
//写入数据
var str string = "Hello World"
n,err := file.Write([]byte(str))//需要将字符串转成字节切片
if err != nil{
fmt.Println(err)
}
fmt.Println(n)
}
写入数据WriteAt方法
在指定位置写入数据
func main(){
file,err := os.Create("c:/Test/d.txt")
if err != nil{
fmt.Println(err)
}
defer file.Close()
//写入数据
file.WriteString("Hello World")//n代表数据长度
var str string = "aaa"
num,_ := file.Seek(0,io.SeekEnd) //将光标定位到文件中原有内容的后面,返回文件中原有数据的长度 第一个参数:在原有长度+0,光标后移0
fmt.Println("num=",num)
n,err := file.WriteAt([]byte(str),num)//第二个参数:在指定位置写入数据
if err != nil{
fmt.Println(err)
}
fmt.Println(n)
}
向已经存在文件中写入数据
OpenFile()这个函数有三个参数:
第一个参数表示:打开文件的路径
第二个参数表示:模式,常见的模式有O_RDONLY(只读模式),O_WRONLY(只写模式),O_RDWR(可读可写模式),O_APPEND(追加模式)
第三个模式表示:权限,取值范围(0-7)表示如下:
- 0:没有任何权限
- 1:执行 权限(如果是可执行文件,是可以运行的)
- 2:写权限
- 3:写权限与执行权限
- 4:读权限
- 5:读权限与执行权限
- 6:读权限与写权限
- 7:读权限,写权限,执行权限
func main(){
file,err := os.OpenFile("c:/Test/c.txt",os.O_APPEND,6)
if err != nil{
fmt.Println(err)
}
defer file.Close()
//通过文件指针向文件中写入数据,读取数据
n,err:=file.WriteString("aaaaaaaa")
if err != nil{
fmt.Println(err)
}
fmt.Println(n)
}
读取文件
func main(){
//1.打开要读取的文件
file,err := os.Open("c:/Test/c.txt")//注意:和OpenFile区别,open调用openfile
if err != nil{
fmt.Println(err)
}
defer file.Close()
//2.进行文件内容读取
//定义一个字符类型切片,存储从文件中读取的数据
buffer := make([]byte,1024*2) //大小为2Kb
n,err := file.Read(buffer)//将从文件中读取的数据保存到字符切片中。n:表示从文件中读取的数据的长度
if err != nil{
fmt.Println(err)
}
fmt.Println(string(buffer[:n]))
fmt.Println("读取数据的长度:",n)
//3.关闭文件
}
循环读取文件内容
func main(){
//1.打开要读取的文件
file,err := os.Open("c:/Test/c.txt")//注意:和OpenFile区别,open调用openfile
if err != nil{
fmt.Println(err)
}
defer file.Close()
buffer := make([]byte,10)//实际文件长度大于10
for{
n,err := file.Read(buffer)
if err==io.EOF{//EOF表示到达文件末尾
break
}
fmt.Print(string(buffer[:n]))
}
}
模拟文件备份案例
func main(){
//1.打开原有文件(file.txt)
file1,err := os.Open("c:/Test/file.txt")
if err != nil{
fmt.Println(err)
}
//2.创建一个新的文件
file2,err := os.Creat("c:/Test/file2.txt")
if err != nil{
fmt.Println(err)
}
defer file1.Close()
defer file2.Close()
//3.将原有文件中的内容读取出来,然后写入到新的文件中
buffer := make([]byte,1024*2)
for{
n,err := file.Read(buffer)
if err==io.EOF{//EOF表示到达文件末尾
break
}
file2.Write(buffer[:n])
}
//4.关闭文件
}