操作文件及目录
1、使用 file.read 方法读取文件
代码实例
package main
import (
"fmt"
"io"
"os"
)
func main() {
// 打开文件
file, err := os.Open("./main.go")
defer file.Close()
if err != nil {
panic(err)
}
// 读取文件内容
var temp = make([]byte, 128)
var str []byte
for {
n, err2 := file.Read(temp)
if err2 == io.EOF {
fmt.Println("读取完毕")
break
}
if err != nil {
panic(err)
}
str = append(str, temp[:n]...)
}
fmt.Println(string(str))
}
2、使用 bufio 读取文件
代码示例
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
// 打开文件
file, err := os.Open("./main.go")
if err != nil {
panic(err)
}
// 读取文件内容
var fileStr string
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
fileStr += str
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
}
fmt.Println(fileStr)
}
3、使用 ioutil 读取文件
代码示例
package main
import (
"fmt"
"io/ioutil"
)
func main() {
byteStr, err := ioutil.ReadFile("./main.go")
if err != nil {
panic(err)
return
}
fmt.Println(string(byteStr))
}
4、使用 file.write 写入文件
代码示例
// 使用 file.write 写入文件
package main
import "os"
func main() {
file, err := os.OpenFile("test.txt", os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
panic(err)
}
// 写入切片数据
str := "写入的数据"
file.Write([]byte(str))
// 写入字符串数据
file.WriteString("写入的数据")
file.Close()
}
5、使用 bufio 写入文件
代码示例
// 使用 bufio 写入文件
package main
import (
"bufio"
"os"
)
func main() {
file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
panic(err)
}
write := bufio.NewWriter(file)
str := "写入的数据"
write.WriteString(str)
write.Flush()
file.Close()
}
6、使用 ioutil 写入文件
代码示例
// 使用 ioutil 写入文件
package main
import "io/ioutil"
func main() {
str := "写入的数据"
err := ioutil.WriteFile("test.txt", []byte(str), 0666)
if err != nil {
panic(err)
}
}
7、使用 ioutil 复制文件
代码示例
// 使用 ioutil 复制文件
package main
import "io/ioutil"
type copyFile struct {
srcFileName string
dstFileName string
}
func copy(c *copyFile) (err error) {
byteStr, err1 := ioutil.ReadFile(c.srcFileName)
if err1 != nil {
return err1
}
err2 := ioutil.WriteFile(c.dstFileName, byteStr, 0666)
if err2 != nil {
return err2
}
return nil
}
func main() {
c := copyFile{
srcFileName: "test.txt",
dstFileName: "test-new.txt",
}
err := copy(&c)
if err != nil {
panic(err)
}
}
8、使用 文件流 复制文件
代码示例
// 使用 文件流 复制文件
package main
import (
"io"
"os"
)
type copyFile struct {
srcFileName string
dstFileName string
}
func copy(c *copyFile) (err error) {
sFile, err1 := os.Open(c.srcFileName)
defer sFile.Close()
if err1 != nil {
return err1
}
dFile, err2 := os.OpenFile(c.dstFileName, os.O_CREATE|os.O_RDWR, 0666)
defer dFile.Close()
if err2 != nil {
return err2
}
var tempFile = make([]byte, 128)
for {
n1, err := sFile.Read(tempFile)
if err == io.EOF {
break
}
if err != nil {
return err
}
if _, err := dFile.Write(tempFile[:n1]); err != nil {
return err
}
}
return nil
}
func main() {
c := copyFile{
srcFileName: "test.txt",
dstFileName: "test-new.txt",
}
err := copy(&c)
if err != nil {
panic(err)
}
}
9、创建目录及多级目录
代码示例
package main
import "os"
func main() {
// 创建目录
err1 := os.Mkdir("test", 0666)
if err1 != nil {
panic(err1)
}
// 创建多级目录
err2 := os.MkdirAll("test/01", 0666)
if err2 != nil {
panic(err2)
}
}
10、删除文件及目录
代码示例
package main
import "os"
func main() {
// 删除目录或文件
err1 := os.Remove("test")
if err1 != nil {
panic(err1)
}
// 删除多级目录
err2 := os.RemoveAll("test/01")
if err2 != nil {
panic(err2)
}
}
11、重命名文件或目录
代码示例
package main
import "os"
func main() {
err := os.Rename("test", "test1")
if err != nil {
panic(err)
}
}