Golang 文件目录处理
Golang 文件目录处理
文件读取
方法1
1、只读方式打开文件 file,err := os.Open()
2、读取文件 file.Read()
3、关闭文件流 defer file.Close()
//打开文件 返回一个指针
file, err := os.Open("./11.go")
defer file.Close()
if err != nil {
fmt.Println(err)
return
}
//读取文件内容
var s []byte
var t = make([]byte, 128)
for {
n, err := file.Read(t)
if err == io.EOF { //表示文件读取完毕
break
}
if err != nil {
return
}
s = append(s, t[:n]...)
}
fmt.Print(string(s))
方法2 bufio 读取文件
1、只读方式打开文件 file,err := os.Open()
2、创建reader对象 reader := bufio.NewReader(file)
3、ReadString读取文件 line, err :=reader.ReadString('\n')
4、关闭文件流 defer file.Close()
//打开文件 返回一个指针
file, err := os.Open("./11.go")
defer file.Close()
if err != nil {
fmt.Println(err)
return
}
//读取文件内容
var s string
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n') //表示一次读取一行
if err == io.EOF {
s += str
break
}
if err != nil {
return
}
s += str
}
fmt.Print(s)
方法3 ioutil 读取文件
ioutil 读取文件
打开关闭文件的方法它都封装好了只需要一句话就可以读取
ioutil.ReadFile("file")
byteStr, err := ioutil.ReadFile("./11.go")
if err != nil {
return
}
fmt.Println(string(byteStr))
文件写入
相关权限如下:
函数 | 描述 |
---|---|
os.O_CREATE | 创建 |
os.O_RDWR | 读写 |
os.O_APPEND | 追加 |
os.O_RDONLY | 只读 |
os.O_WRONLY | 只写 |
os.O_TRUNC | 清空文件 |
os.O_SYNC | 当进行一系列写操作时,每次都要等待上次的 I/O 操作完成再进行 |
os.O_EXCL | 和 O_CREATE 配合使用,文件必须不存在,否则返回一个错误; |
方法1
1、打开文件 file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
2、写入文件
file.Write([]byte(str)) //写入字节切片数据
file.WriteString("直接写入的字符串数据") //直接写入字符串数据
3、关闭文件流 file.Close()
file, err := os.OpenFile("./a.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
defer file.Close()
if err != nil {
return
}
//for循环写入多行
// for i := 0; i < 10; i++ {
// file.WriteString("xxxxx" + strconv.Itoa(i) + "\r\n")
// }
//写入单行
var str = "直接写入"
file.Write([]byte(str))
方法2 bufio 写入文件
1、打开文件 file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
2、创建writer对象 writer := bufio.NewWriter(file)
3、将数据先写入缓存 writer.WriteString("你好golang\r\n")
4、将缓存中的内容写入文件 writer.Flush()
5、关闭文件流 file.Close()
file, err := os.OpenFile("./a.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
defer file.Close()
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
writer := bufio.NewWriter(file)
writer.WriteString("你好golang") //将数据先写入缓存
// for i := 0; i < 10; i++ {
// writer.WriteString("直接写入的字符串数据" + strconv.Itoa(i) + "\r\n")
// }
writer.Flush() //将缓存中的内容写入文件
方法3 ioutil 写入文件
str := "hello golang"
err := ioutil.WriteFile("file", []byte(str), 0666)
str := "hello golang"
err := ioutil.WriteFile("./a.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file failed, err:", err)
return
}
文件重命名
os.Rename(oldname,newname)
文件复制
//自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(srcFileName string, dstFileName string) (err error) {
sFile, err1 := os.Open(srcFileName)
defer sFile.Close() //必须关闭
dFile, err2 := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
defer dFile.Close() //必须关闭
if err1 != nil {
return err1
}
if err2 != nil {
return err2
}
var tempSlice = make([]byte, 1280)
for {
//读取数据
n1, err := sFile.Read(tempSlice)
if err == io.EOF {
break
}
if err != nil {
return err
}
// 写入数据
if _, err := dFile.Write(tempSlice[:n1]); err != nil {
return err
}
}
return nil
}
err := CopyFile(srcFile, dstFile)
目录操作
创建目录
os.Mkdir('aaa',0755)
创建多层目录
os.MkdirAll('a/b/c',0755)
删除文件和目录
os.Remove("a.txt")
os.RemoveAll("aaa")
Golang 文件目录处理
http://www.jcwit.com/article/502/