爱摸鱼的Demon
首页
前端知识
后端技术
工程实践
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

爱摸鱼的Demon

我的地盘,欢迎光临。
首页
前端知识
后端技术
工程实践
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • C#

  • Golang

    • Go

      • GO环境安装
      • Hello World GO版
      • GO变量、数据类型与方法
      • GO的基础语法
      • 并发安全与锁
      • channel(通道、管道)
      • 反射
      • 文件目录
      • Golang中的接口(Interface)
    • Gin

    • GORM

  • 后端技术
  • Golang
  • Go
DemonW-X
2025-09-29

文件目录

一、读取文件

方法1:

①只读方式打开文件

file, err := os.Open("E:\\GoDemo\\049-1\\test.txt") //绝对路径打开文件
/file, err :=  os.Open("./test.txt") //相对路径打开文件
1
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

③关闭文件流

//文件打开必须关闭
defer file.Close()
if err != nil {
    fmt.Println("Open file error:", err)
}
1
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

③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

二、写入文件

方法1:

①打开文件,os.OpenFile需要传入对应的权限。

os.OpenFile("./test.txt", os.O_WRONLY|os.O_CREATE, 0666) //打开文件的名称,打开文件的模式,文件权限
//0666:所有者都有权限
//read:04,write:02,:x(执行):01
1
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

③关闭文件流

defer file.Close()
if err != nil {
    fmt.Println("Open file err:", err)
}
1
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

④将缓存写入文件

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

三、复制文件

方法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:通过文件流的方式实现

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

四、创建/删除目录

// 创建单个目录
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

五、重命名目录

编辑 (opens new window)
反射
Golang中的接口(Interface)

← 反射 Golang中的接口(Interface)→

最近更新
01
Gorm之事务
11-13
02
Gorm之关联进阶版
11-13
03
Gorm之根据外键关联表
11-13
更多文章>
Theme by Vdoing | Copyright © 2022-2025 爱摸鱼的Demon | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式