美文网首页
Go语言文件的操作

Go语言文件的操作

作者: 醉酒的姑娘 | 来源:发表于2019-05-10 11:09 被阅读0次
    package main
    
    import (
    "bufio"
    "fmt"
    "io"
    "os"
    )
    
    func main() {
    
    //os.Open 只读方式打开
    //fp,err:=os.Open("a.txt")
    //os.OpenFile(文件名,打开方式,权限)
    //打开方式:  o_rdonly(只读模式) o_wronly(只写模式) o_rdwr(可读可写模式)  o_append(追加模式)
    //权限 0 没有任何权限 1 执行权限 2 写权限 3写权限和执行权限 4读权限 5读权限和执行权限 6 读权限和写权限 7读权限写权限执行权限
    //fp,err:=os.OpenFile("a.txt",os.O_RDWR,6)
    
    fp,err:=os.Create("a.txt")
    if err!=nil{
        fmt.Println("文件创建失败",err)
        return
    }
    
    //1 \n不会换行 原因在windows文本文件中换行\r\n 回车
    //fp.WriteString("hi\n")
    //fp.WriteString("123\r\n")
    //fp.WriteString("456")
    
    //2
    //slice:=[]byte{'a','b','c','d'}
    slice:=[]byte("文件文件\r\n")
    count,err1:=fp.Write(slice)
    if err1!=nil{
        fmt.Println("失败")
        return
    }else {
    
        fmt.Println(count)
    }
    
    
    
    //3
    //获取光标流位置
    //获取文件起始到结尾有多少个字符
    //count3,_:=fp.Seek(0,os.SEEK_END)
    count3,_:=fp.Seek(0,io.SeekEnd)
    //指定位置写入
    fp.WriteAt([]byte("hello word"),count3)
    fmt.Println(count3)
    
    defer fp.Close()
    
    
    fpd,err:=os.Open("a.txt")
    if err!=nil{
        fmt.Println("失败")
    }
    buf:=make([]byte,1024*2)
    // 1 读取文件 块读取
    //n,_:=fp.Read(buf)//读取的长度
    //fmt.Println(string(buf[:n]))
    //n,_=fp.Read(buf)
    //fmt.Println(string(buf[:n]))
    
    
    //2
    for{
        n,err:=fpd.Read(buf)
        if err==io.EOF{//io.eof 文件结尾  返回值 errors.New("EOF")
            break
        }
        fmt.Println(string(buf[:n]))
    }
    
    
    fmt.Println("----------分割线-----------------")
    
    fpd.Seek(0,0)
    //3 行读取
    
    //创建文件缓冲区
    r:=bufio.NewReader(fpd)
    //截取标志‘\n’
    sliceh,_:= r.ReadBytes('\n')
    fmt.Println(string(sliceh))
    
    fmt.Println("----------分割线-----------------")
    
    
    fpd.Seek(0,0)
    for  {
    //遇到‘\n’结束 但是‘\n’也读取进入
    buf,errd:=r.ReadBytes('\n')
    fmt.Println(string(buf))
    if errd!=nil{
        if errd==io.EOF{
            break
        }
        fmt.Println("失败",errd)
    }
    
    
    }
    
    fmt.Println("----------分割线-----------------")
    
    fpd.Seek(0,0)
    
    for{
        str,err2:=r.ReadString('\n')
        fmt.Println(str)
        if(err2==io.EOF){
            break
        }
    }
    
    defer fpd.Close()
    }
    

    执行结果

    14
    14
    文件文件
    hello word
    ----------分割线-----------------
    文件文件
    
    ----------分割线-----------------
    hello word文件文件
    
    hello word
    ----------分割线-----------------
    文件文件
    
    hello word
    

    相关文章

      网友评论

          本文标题:Go语言文件的操作

          本文链接:https://www.haomeiwen.com/subject/hrbooqtx.html