文件目录
一、读取文件
方法1:
①只读方式打开文件
file, err := os.Open("E:\\GoDemo\\049-1\\test.txt") //绝对路径打开文件
/file, err := os.Open("./test.txt") //相对路径打开文件
1
2
2
②读取文件
var slice []byte
var temp = make([]byte, 128)
for {
n, err1 := file.Read(temp)
if err1 == io.EOF { //io.EOF 表示读取完毕
fmt.Println("Read Over !")
break
} else if err1 != nil {
fmt.Println("Read file err:", err1)
return
}
fmt.Printf("Read %d bytes\n", n) //Read 128 bytes
slice = append(slice, temp[:n]...) //拼接注意:temp[:n] 最后不足128个字节直接显示
}
fmt.Println(string(slice))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
③关闭文件流
//文件打开必须关闭
defer file.Close()
if err != nil {
fmt.Println("Open file error:", err)
}
1
2
3
4
5
2
3
4
5
方法2:
①只读方式打开文件 (参照方法一-①)
②创建reader对象 使用bufio读取文件
var filestring string
reader := bufio.NewReader(file)
for {
str, err1 := reader.ReadString('\n') //表示一次读取一行数据
if err1 == io.EOF {
fmt.Println("Over!")
filestring += str
break
}
if err1 != nil {
fmt.Println("err1:", err1)
return
}
filestring += str
}
fmt.Println(filestring)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
③ReadString读取文件
str, err1 := reader.ReadString('\n') //表示一次读取一行数据
1
④关闭文件流(参照方法一-③)
方法3:
使用ioutil.ReadFile,打开关闭的方法已经封装好了(仅适用于比较小的文件)
file, err := ioutil.ReadFile("./test.txt")
if err != nil {
fmt.Println("Open file error:", err)
return
}
fmt.Println(string(file))
1
2
3
4
5
6
2
3
4
5
6
二、写入文件
方法1:
①打开文件,os.OpenFile需要传入对应的权限。
os.OpenFile("./test.txt", os.O_WRONLY|os.O_CREATE, 0666) //打开文件的名称,打开文件的模式,文件权限
//0666:所有者都有权限
//read:04,write:02,:x(执行):01
1
2
3
2
3

②写入文件
//写入文件
for i := 0; i < 10; i++ {
file.WriteString("11111111" + strconv.Itoa(i) + " \r\n")
}
//或者
var str = "hello world"
file.Write([]byte(str))
fmt.Println("Write over !")
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
③关闭文件流
defer file.Close()
if err != nil {
fmt.Println("Open file err:", err)
}
1
2
3
4
2
3
4
方法2:
①打开文件(参照方法一-①)
②创建writer对象
writer := bufio.NewWriter(file)
1
③将数据写入缓存
for i := 0; i < 10; i++ {
writer.WriteString("hello world" + strconv.Itoa(i))
}
1
2
3
2
3
④将缓存写入文件
writer.Flush()
1
⑤关闭文件流(参照方法一-③)
方法3:
使用ioutil.WriteFile
str := "hello world"
err := ioutil.WriteFile("./test.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file error:", err)
return
}
1
2
3
4
5
6
2
3
4
5
6
三、复制文件
方法1:使用ioutil包实现
str, err := ioutil.ReadFile("E:\\GoDemo\\049-4\\test.txt")
if err != nil {
fmt.Println(err)
return
}
err1 := ioutil.WriteFile("E:\\GoDemo\\050-1\\test.txt", str, 006)
if err1 != nil {
fmt.Println(err1)
}
fmt.Println("Copy File Success")
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
方法2:通过文件流的方式实现
sFile, err1 := os.Open(E:\\GoDemo\\050-1\\test.txt)
defer sFile.Close()
dFile, err2 := os.OpenFile(E:\\GoDemo\\050-2\\test.txt, os.O_CREATE|os.O_WRONLY, 0666)
defer dFile.Close()
if err1 != nil {
return err1
}
if err2 != nil {
return err2
}
var tempSlice = make([]byte, 128)
for {
n1, e1 := sFile.Read(tempSlice)
if e1 == io.EOF {
break
}
if e1 != nil {
return e1
}
_, e2 := dFile.Write(tempSlice[:n1])
if e2 != nil {
return e2
}
}
return nil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
四、创建/删除目录
// 创建单个目录
func createDir1() {
//err := os.Mkdir("./error", 0666)
//if err != nil {
// fmt.Println(err)
//}
os.Mkdir("./error", 0666)
fmt.Println("createDir1 ok")
}
// 创建多级目录
func createDir2() {
err := os.MkdirAll("./error1/error2", 0666)
if err != nil {
fmt.Println(err)
}
fmt.Println("createDir2 ok")
}
// 删除单个目录/文件
func removeFile1() {
err := os.Remove("./error1/error2")
if err != nil {
fmt.Println(err)
}
fmt.Println("removeFile1 ok")
}
// 删除多个目录
func removeFile2() {
err := os.RemoveAll("./error1")
if err != nil {
fmt.Println(err)
}
fmt.Println("removeFile2 ok")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
五、重命名目录
编辑 (opens new window)