Go语言文件操作

2018-10-09  本文已影响0人  AuglyXu

文件的打开和关闭

     // 1.打开文件
     //os.Open("D:\\lnj.txt")
     fp, err := os.Open("D:/lnj.txt") // 推荐写法
     if err != nil {
        fmt.Println("打开失败")
     }else{
        fmt.Println(fp)//fp是文件句柄
     }
 // 2.关闭文件
     defer func() {
        if err = fp.Close(); err !=nil{
            fmt.Println("关闭文件失败")
        }
     }()

文件的读取

     fp, err := os.Open("D:/lnj.txt")
     if err != nil{
        fmt.Println("打开文件失败")
         return
     }
     // 2.关闭文件
     defer func() {
        if err = fp.Close(); err != nil{
            fmt.Println("关闭文件失败")
        }
     }()

// sce := make([]byte,7)
//len,err := fp.Read(sce)
// if err != nil{
 //   fmt.Println("读取失败")
//}else{
//   fmt.Println("len = ",len)
//  fmt.Println(string(sce[:len]))
//}

//sce := make([]byte,7)
//len,err := fp.Read(sce)
//for ;len>0;{
 // fmt.Print(string(buff[:len]))
//  // 再次利用Read函数去读取7个字节
//  len, err = fp.Read(buff)
//}
sce := make([]byte,7)
for{
  len,err := fp.Read(sce)
  if err == io.EOF || len < 0{
    break
}
 // 将读到的数据转换为字符串打印
  fmt.Print(string(buff[:len]))
}

// 1.打开文件
    fp, err := os.Open("D:/lnj.txt")
    if err != nil{
        fmt.Println("打开文件失败")
        return
    }
    // 2.关闭文件
    defer func() {
        if err = fp.Close(); err != nil{
            fmt.Println("关闭文件失败")
        }
    }()
  r := bufio.NewReader(fp) //接收一个句柄,返回一个句柄,利用返回的句柄来读取数据
/*
  buff, err :=  r.ReadBytes('\n')
    if(err != nil){
        fmt.Println("读取失败")
    }else{
        fmt.Println(string(buff))
    }
*/
//str,err := r.ReadString('\n')
for{
    buff, err :=  r.ReadBytes('\n')
    fmt.Print(string(buff))
    if err == io.EOF{
    //if err != nil{
        //fmt.Print("读取失败")
        //fmt.Print(err)
        break
    }
}
    /*
    abcdefg\n
    1234567
    第一次读取: buf = abcdefg\n
    第二次读取: buf = 1234567
    但是由于第二次读取一直读到了文件的末尾都没有读到\n, 所以ReadBytes函数就给err赋值了一个io.EOF
    所以如果1234567后面没有\n, 并且是先判断错误, 那么就会少输出一次
     */

 /*
    for{
        buff, err :=  r.ReadBytes('\n')
        if err == io.EOF{
        //if err != nil{
            //fmt.Print("读取失败")
            //fmt.Print(err)
            break
        }
        fmt.Print(string(buff))
    }
 */

buff,err := ioutil.Readfile("D:/lnj.txt")
if err != nil {
  fmt.Println(err)
}else{
  fmt.Print(string(buff))
}

文件写入

fp,err := os.Create("D:/lnj.txt")
if err != nil {
  fmt.Println(err)
  return
}
defer func(){
  if err = fp.Close();err != nil{
    fmt.Println("关闭文件失败")
  }
}
//写入数据
buf := []byte{'x','x','z','\r','\n'}
len,err := os.Write(buf)
 if err !=nil{
    fmt.Println("写入失败")
}else{
     fmt.Println("写入成功, 写入了", len, "个字节")
 } 

     // 1.创建一个文件
    fp, err := os.Create("D:/lnj.txt")
    if err != nil{
        fmt.Println("打开文件失败")
        return
    }
    // 2.关闭文件
    defer func() {
        if err = fp.Close(); err !=nil{
            fmt.Println("关闭文件失败")
        }
    }()

    // 3.创建一个写入缓冲区
     w := bufio.NewWriter(fp)
    //buf := []byte{'l','n','j','\r','\n'}
    //len, err := w.Write(buf)
    len, err := w.WriteString("www.it666.com\r\n")
      if err != nil {
    fmt.Println("打开文件失败")
    }else{
     fmt.Println("写入了",len,"个字符")
    }  
    //刷新缓冲区
    w.Flush()

    buf := []byte{'l','n','j','\r','\n'}
    err := ioutil.WriteFile("D:/lnj.txt", buf, 0666)
    if err != nil{
        fmt.Println("写入数据失败")
    }else{
        fmt.Println("写入数据成功")
    }

文件读写

以下代码为文件内容的追加:

fp, err := os.OpenFile("D:/lnj.txt", os.O_APPEND | os.O_RDWR, 0666)
     if err != nil{
        fmt.Println("创建失败")
     }else{
        fmt.Println(fp)
     }
     defer func() {
        if err := fp.Close(); err != nil{
            fmt.Println("关闭文件失败")
        }
     }()

w := bufio.NewWriter(fp)
    len , err := w.WriteString("\r\n123456")
    if err != nil{
        fmt.Println("写入数据失败")
    }else{
        fmt.Println("写入成功, 写入了", len, "个字节")
    }
    w.Flush()

文件的拷贝


文件判断

finfo, err := os.Stat("D:/WWW")
    if err != nil {
        fmt.Println(err)
    }else{
        //fmt.Println(finfo)
        fmt.Println(finfo.Name())
        fmt.Println(finfo.Size())
        fmt.Println(finfo.ModTime())
        fmt.Println(finfo.IsDir())
    }
上一篇 下一篇

猜你喜欢

热点阅读