文章目录
一、只读文件
go
复制代码
file, err := os.Open("./main.go")
defer file.Close() //打开文件一定要关闭关闭文件
if err != nil {
fmt.Println("文件打开失败", err)
}
/*方案一 */
// 读取文件内容
var typeSlice = make([]byte, 128) //创建byte切片 128字节
var strSlice []byte
for { //循环128 128方式的去读
n, err := file.Read(typeSlice)
if err == io.EOF { //文件读取完毕
fmt.Println("文件读取完毕")
break
}
if err != nil {
fmt.Println("文件读取失败", err)
return
}
fmt.Printf("读取了%d个字节\n", n)
strSlice = append(strSlice, typeSlice[:n]...) //最后一次读取不一定是128字节
}
fmt.Println("读取的内容:", string(strSlice)) //string内容 必须是执行读取之后再打印
/*方案二 bufio读取文件 */
reader := bufio.NewReader(file)
var fileStr string
for {
str, err := reader.ReadString('\n') //读取一行 一行一行的读取
if err == io.EOF { //文件读取完毕
fileStr += str
fmt.Println("文件读取完毕")
break
}
if err != nil {
fmt.Println("文件读取失败", err)
return
}
fmt.Println("读取的内容:", str)
fileStr += str //拼接字符串
}
fmt.Println("读取的文件内容:", fileStr)
/*方案三 ioutil读取文件 适合文件不大*/
byteStr, err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Println("文件读取失败", err)
return
}
fmt.Println("读取的文件内容:", string(byteStr))
二、写入文件
go
复制代码
/*写文件 os.O_CREATE创建 | os.O_WRONLY只写 | os.O_TRUNC清空文件 | os.O_APPEND追加*/
file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
defer file.Close()
if err != nil {
fmt.Println("文件打开失败", err)
return
}
//方法一 写入文件
file.WriteString("hello world") // 写入字符串
//方法二 写入文件
file.Write([]byte("hello world"))
// 方法三 写入文件
writer := bufio.NewWriter(file)
writer.WriteString("你好 golang") //将数据先写入缓存
writer.Flush() //刷新缓冲区,将缓存的数据写入文件
//方法四 写入文件 但是覆盖全部
str := "hello golang"
err := ioutil.WriteFile("./test.txt", []byte(str), 0666)
if err != nil {
fmt.Println("文件写入失败", err)
return
}
三、复制文件
go
复制代码
// 方法一
byteStr, err := ioutil.ReadFile("test.txt")
if err != nil {
fmt.Println("文件读取失败", err)
return
}
err1 := ioutil.WriteFile("test2.txt", byteStr, 0666)
if err1 != nil {
fmt.Println("文件写入失败", err)
return
}
fmt.Println("文件复制成功")
四、创建目录
go
复制代码
err := os.Mkdir("./test3", 0666)
err := os.MkdirAll("./test3/test4", 0666) //创建多级目录
if err != nil {
fmt.Println("创建目录失败", err)
return
}
fmt.Println("创建目录成功")
五、删除目录/文件
go
复制代码
err := os.Mkdir("./test3", 0666)
err := os.RemoveAll("./test3/test4") //到哪一级删哪一级
if err != nil {
fmt.Println("删除目录失败", err)
return
}
fmt.Println("删除目录成功")
五、重命名文件
go
复制代码
err := os.Rename("./test.txt", "./test1.txt")
if err != nil {
fmt.Println("重命名失败", err)
return
}
fmt.Println("重命名成功")