Go 操作文件


判断文件是否存在 存在返回 true 不存在返回false

func checkFileIsExist(filename string) bool {
    var exist = true
    if _, err := os.Stat(filename); os.IsNotExist(err) {
        exist = false
    }
    return exist
}

打开文件 返回文件指针

file, error := os.Open("/tmp/1.txt")
if error != nil {
    fmt.Println(error)
}
fmt.Println(file)
file.Close()

删除文件

del := os.Remove("/tmp/1.txt")
if del != nil {
    fmt.Println(del)
}

删除指定 path 下的所有文件

delDir := os.RemoveAll("/tmp/testdir")
if delDir != nil {
        fmt.Println(delDir)
}

以读写方式打开文件 返回文件指针 如果不存在则创建

file2, error := os.OpenFile("/tmp/2.txt", os.O_RDWR|os.O_CREATE, 0644)
if error != nil {
    fmt.Println(error)
}
fmt.Println(file2)
file2.Close()

创建文件 Create 函数也是调用的 OpenFile

file3, error := os.Create("/tmp/3.txt")
if error != nil {
    fmt.Println(error)
}
fmt.Println(file3)
file3.Close()

读取文件内容

file4, error := os.Open("/tmp/1.txt")
if error != nil {
    fmt.Println(error)
}

创建 byte 的 slice 用于接收文件读取数据

buf := make([]byte, 1024)
// 循环读取
for {
    // Read 函数会改变文件当前偏移量
    len, _ := file4.Read(buf)
    // 读取字节数为 0 时跳出循环
    if len == 0 {
        break
    }
    fmt.Println(string(buf))
}
file4.Close()

读取文件内容

file5, error := os.Open("/tmp/1.txt")
if error != nil {
    fmt.Println(error)
}
buf2 := make([]byte, 1024)
ix := 0
for {
    // ReadAt 从指定的偏移量开始读取,不会改变文件偏移量
    len, _ := file5.ReadAt(buf2, int64(ix))
    ix = ix + len
    if len == 0 {
    break
    }
    fmt.Println(string(buf2))
}
file5.Close()

WriteString 写入文件

file6, error := os.Create("/tmp/4.txt")
if error != nil {
    fmt.Println(error)
}
data := "This is data\r\n"
for i := 0; i < 10; i++ {
    // 写入 byte 的 slice 数据
    file6.Write([]byte(data))
    // 写入字符串
    file6.WriteString(data)
}
f.Sync()
file6.Close()

WriteAt 写入文件

file7, error := os.Create("/tmp/5.txt")
if error != nil {
    fmt.Println(error)
}
for i := 0; i < 10; i++ {
    // 按指定偏移量写入数据
    ix := i * 64
    file7.WriteAt([]byte("This is data"+strconv.Itoa(i)+"\r\n"), int64(ix))
}
file7.Close()

ioutil.WriteFile 写入文件

var wireteString = "测试n"
var d1 = []byte(wireteString)
// 写入文件(字节数组)
err2 := ioutil.WriteFile("./output2.txt", d1, 0666)

bufio.NewWriter 写入文件

// 创建新的 Writer 对象
var f *os.File
w := bufio.NewWriter(f)
n4, err3 := w.WriteString("bufferedn")
fmt.Printf("写入 %d 个字节n", n4)
w.Flush()
f.Close()

io.WriteString 写入文件

var f *os.File
var wireteString = "测试n"
// 写入文件(字符串)
n, err1 := io.WriteString(f, wireteString)
fmt.Printf("写入 %d 个字节n", n)
分享:

评论