Go 文件操作

创建文件

package main
func Create_File(){
    f,err:=os.Create("test.txt")
    if err != nil{
        fmt.Println("创建文件失败",err)
        return 
    }
    defer f.Close()
    fmt.Println("创建文件成功")
    // 用字符串类型写入文件
    f.WriteString("Hello World!\n")
    
    // 用 byte 类型写入文件,这里要注意,用单引号,而且不能有中文
    b :=[]byte{'H','e','l','l','o',' ','W','o','r','l','d'}
    f.Write(b)
    // 第二种方法,用切片转换
    text:="Hello World!"
    b1:=[]byte(text)
    f.Write(b1)
    // 读取数据
    buf:=make([]byte,1024)
    f.Read(buf)
    
}

打开文件

package main
/**
    读写方式:
    O_APPEND:追加
    O_RDONLY: 只读
    O_RDWR:可读可写
    O_WRONLY:只写
    O_CREATE:创建
    */
    //第三个参数是权限,取值范围0-7
    /**
    0:没有任何权限
    1:执行权限(如果是可执行文件,是可以运行的)
    2:写权限
    3:写权限与执行权限
    4:读权限
    5:读权限与执行权限
    6:读权限与写权限
    7:读权限,写权限,执行权限
    */
func Open_File(){
    // 只读打开
    f,err:=os.Open("test.txt")
    if err !=nil{
        fmt.Println("打开文件错误!")
        return
    }
    // 关闭
    defer f.Close()
    
}
func Open_File_Write(){
    // 可读可写,不能创建
    f,err:=os.Open("test.txt",os.O_RDWR,6)
    // 可读可写,如果文件不存在自动创建
    f,err:=os.Open("newtest.txt",os.O_RDWR|O_CREATE,6)
    if err != nil{
        fmt.Println("文件打开失败!")
        return 
    }
    defer f.Close()
    // 写入数据
    f.WriteString("写入一个字符串")
    // 读取数据
    buf:=make([]byte,1024)
    f.Read(buf)
    fmt.Println(string(buf))
}

读取文件

// 读取文件
func Read_File(){
    f,err:=os.Open("test.txt")
    if err != nil{
    /**
    系统打开文件个数限制是65535
    所以重复打开同一个文件是可以的
    
    1、文件不存在
    2、文件权限
    3、文件打开上限
    */
        fmt.Println("文件打开失败!",err)
        return
    }
    defer f.Close()
    b:=make([]byte,1024)
    f.Read(b)
    fmt.Println(string(b))
}
// 循环读取
func For_Read_File(){
    f,err:=os.Open("test.txt")
    if err != nil{
        fmt.Println("打开文件失败!",err)
        return
        
    }
    defer f.Close()
    b:=make([]byte,1024)
    for {
        n,error:=f.Read(b)
        if error == io.EOF{ // -1
            break
        }
        fmt.Println(string(b[:n]))
    
    }
}
// 行读取
func Handle_Read_File(){
    f,err:=os.Open("test.txt")
    if err != nil{
        fmt.Println("打开文件失败!",err)
        return
    }
    defer f.Close()
    scanner := bufio.NewScanner(f)
    for scanner.Scan(){
        // 这里二选一都可以
        line:=scanner.Text()
        // line:=scanner.Bytes()
        fmt.Printf("%s\n",line)
    }
    
    if err := scanner.Err(); err!=nil{
        log.Printf("读取文件报错:%s,err:[%v]","test.txt",err)
        return 
    }
    
    
}
拷贝文件
func main(){
    f_r,err:=os.Open("test.txt")
    if err != nil {
        fmt.Println("打开文件失败",err)
        return 
    }
    defer f_r.Close()
    f_w,err:=os.Create("newtest.txt")
    if  err != nil {
        fmt.Println("创建文件失败",err)
        return
    }
    defer f_w.Close()
    
    buf := make([]byte,1024)
    // 循环从test文件中获取数据,写入newtest文件中
    for{
        n,err := f_r.Read(buf)
        if err != nil && err == io.EOF {
            fmt.Printf("读取完毕,n= %d\n",n)
            return 
        }
        f_w.Wtrte(buf[:n]) // 读多少,写多少
    
    }
    
    
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容