十二、Golang学习笔记:文本文件的处理


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.关闭文件
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值