Golang文件 目录操作
模式 | 含义 |
---|---|
os.O_WRONLY | 只写 |
os.O_CREATE | 创建文件 |
os.O_RDONLY | 只读 |
os.O_RDWR | 读写 |
os.O_TRUNC | 清空 |
os.O_APPEND | 追加 |
perm:文件权限,一个八进制数,r(读)04,w(写)02,x(执行)01.
package main
import (
"fmt"
"io"
"io/ioutil"
"os"
)
//编写一个函数,接收两个文件路径 srcFileName, dstFileName
func copy(srcFileName, dstFileName string) error {
byteStr, err1 := ioutil.ReadFile(srcFileName)
if err1 != nil {
return err1
}
err2 := ioutil.WriteFile(dstFileName, byteStr, 0666)
if err2 != nil {
return err2
}
return nil
}
func copyFile(srcFileName, dstFileName string) error {
srcfile, err1 := os.Open(srcFileName)
dstfile, err2 := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
if err1 != nil {
return err1
}
if err2 != nil {
return err2
}
var tempSlice = make([]byte, 128)
for {
n1, e1 := srcfile.Read(tempSlice)
_, e2 := dstfile.Write(tempSlice[:n1])
if e1 != io.EOF {
break
}
if e1 != nil {
return e1
}
if e2 != nil {
return e2
}
}
return nil
}
func main() {
/*
读取文件:
一、读取文件(方法1)
1.只读方式打开文件 file, err := os.Open()
2.读取文件 file.Read()
3.关闭文件流 defer file.Close()
二、读取文件(方法2) bufio读取文件
1.只读方式打开文件 file, err := os.Open()
2.创建reader对象 reader := bufio.NewReader(file)
3.ReadString读取文件 line, err := reader.ReadString('
')
4.关闭文件流 defer file.Close()
三、读取文件(方法3)ioutil 读取文件
打开关闭文件的方法都风钻工好了,只需要一句话就可以读取
ioutil.ReadFile("./main.go")
写入文件:
一、写入文件(方法1)
1.打开文件 file, err := os.OpenFile("./test.txt",os.O_CREATE|os.O_RDWR,0666)
2.写入文件
file.Write([]byte(str)) //写入字节切片数据
file.WriteString("直接写入的字符串数据")//直接写入字符串数据
3.关闭文件流 file.Close()
二、写入文件(方法2)bufio写入文件
1.打开文件 file, err := os.OpenFile("./test.txt",os.O_CREATE|os.O_RDWR,0666)
2.创建writer对象 writer := bufio.NewWriter(file)
3.将数据先写入缓存 writer.WriteString("hello golang
")
4.将缓存中的内容写入文件 writer.Flush()
5.关闭文件流 file.Close()
三、写入文件(方法3)ioutil写入文件
str := "hello golang"
err := ioutil.WriteFile("./test.txt",[]byte(str),0666)
文件重命名:
err := os.Rename("C:/test1.txt", "D:/test1.txt")//只能同盘操作
复制文件:
一、方法1
input, err := ioutil.ReadFile(srcFileName)
err = iotil.WriteFile(dsFileName, input, 0644)
二、方法2
source, _ := os.Open(srcFileName)
destination, _ := os.OpenFile(dsFileName, os.O_CREATE|os.O_WRONLY, 0666)
n, err := source.Read(buf)
destination.Write(buf[:n])
创建目录:
err := os.Mkdir("./abc",0666)
err := os.MkdirAll("dir1/dir2/dir3",0666)//创建多级目录
删除目录和文件:
err := os.Remove("t.txt")
err := os.RemoveAll("aaa")
*/
//读取文件
//只读方式打开当前目录下的main.go文件
// file, err := os.Open("./test.txt") //文件路径可以是相对路径也可以是绝对路径
// defer file.Close() //必须关闭文件流
// if err != nil {
// fmt.Println(err)
// return
// }
// //操作文件
// fmt.Println(file) //&{0xc00007e780}文件地址
// //file.Read()读取文件里面的内容
// var strSlice []byte
// var tempSlice = make([]byte, 128)
// for {
// n, err := file.Read(tempSlice)
// if err == io.EOF { //表示读取完毕
// fmt.Println("读取完毕")
// break
// }
// if err != nil {
// fmt.Println("读取文件失败")
// return
// }
// // fmt.Printf("读取到了%v个字节
", n)
// strSlice = append(strSlice, tempSlice[:n]...)
// }
// fmt.Println(string(strSlice))
//bufio.NewReader(file)方法
// var fileStr string
// reader := bufio.NewReader(file)
// for {
// str, err := reader.ReadString('
') //表示一次读取一行
// if err == io.EOF {
// fileStr += str
// break
// }
// if err != nil {
// fmt.Println(err)
// return
// }
// fileStr += str
// }
// fmt.Println(fileStr)
//ioutil读取文件
// byteStr, err := ioutil.ReadFile("./test.txt")
// if err != nil {
// fmt.Println(err)
// return
// }
// fmt.Println(string(byteStr))
//写入文件
//打开文件
// 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()
// // for i := 0; i < 10; i++ {
// // file.WriteString("写入的字符串" + strconv.Itoa(i) + "
")
// // }
// //写入文件file.Write()
// // var str = "直接写入的字符串"
// // file.Write([]byte(str))
//bufio
// writer := bufio.NewWriter(file)
// // writer.WriteString("hello golang")//将数据先写入缓存
// for i := 0; i < 10; i++ {
// writer.WriteString("writer写入的字符串" + strconv.Itoa(i) + "
")
// }
// writer.Flush() //将缓存中的内容写入文件
//ioutil
// str := "hello golang"
// err := ioutil.WriteFile("./test.txt", []byte(str), 0666)
// if err != nil {
// fmt.Println("Write file failed, err: ", err)
// return
// }
//复制文件
//ioutil
// byteStr, err1 := ioutil.ReadFile("./test.txt")
// if err1 != nil {
// fmt.Println(err1)
// return
// }
// err2 := ioutil.WriteFile("C:/tmp/test.txt", byteStr, 0666)
// if err2 != nil {
// fmt.Println(err2)
// return
// }
// fmt.Println("文件复制成功")
//封装成一个复制文件的方法
// srcFileName := "./test.txt"
// dstFileName := "C:/tmp/golang.txt"
// //ioutil
// // err := copy(srcFileName, dstFileName)
// //file.Read() file.Write()
// err := copyFile(srcFileName, dstFileName)
// if err != nil {
// fmt.Println(err)
// return
// }
// fmt.Println("文件复制成功")
//创建文件
// err := os.Mkdir("./abc", 0666)
// err := os.MkdirAll("dir1/dir2/dir3", 0666) //创建多级目录
// if err != nil {
// fmt.Println(err)
// }
//删除文件
//删除一个文件
// err := os.Remove("test.txt")
//删除一个目录
// err := os.RemoveAll("abc")
//一次删除多个目录
// err := os.RemoveAll("dir1")
// if err != nil {
// fmt.Println(err)
// return
// }
//重命名
err := os.Rename("C:/tmp/golang.txt", "C:/tmp/test.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("重命名成功")
}
Golang语言学习笔记系列都学习自itying的大地老师,非常感谢!!!