Go 1.16 包io/ioutil已经被deprecated了。io/ioutil中的"函数/方法/类型"应该用包io以及os中的相应对象替代。

Go遍历目录、读写、追加文本文件_golang

遍历一级目录

package main

import (
"fmt"
"os"
)

func main() {
// 读取当前目录中的所有文件和子目录
files, err := os.ReadDir(`D:/`)
if err != nil {
panic(err)
}
// 获取文件名组成的切片,并遍历打印每一个文件名
for _, file := range files {
fmt.Println(file.Name())
}
}

读取文本文件

package main

import (
"fmt"
"os"
)

func main() {
// 读取文本文件的内容
txt, err := os.ReadFile(`test.txt`)
if err != nil {
panic(err)
}

// 将字节流转换为字符串
content := string(txt)

// 输出文本内容
fmt.Println(content)
}

写入文本文件

package main

import (
"os"
)

func main() {
// 将保存的字符串转换为字节流
str := []byte(`测试字符串`)

// 保存到文件
err := os.WriteFile(`test.txt`, str, 0666)
if err != nil {
panic(err)
}
}

追加字符串

package main

import "os"

func main() {
str := []byte("\n" + `要追加在的字符串`)

// 以追加模式打开文件
txt, err := os.OpenFile(`test.txt`, os.O_APPEND, 0666)
if err != nil {
panic(err)
}

// 以追加模式打开文件,当文件不存在时生成文件
txt, err = os.OpenFile(`test.txt`, os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
panic(err)
}

defer func(txt *os.File) {
err := txt.Close()
if err != nil {
panic(err)
}
}(txt)

// 写入文件
n, err := txt.Write(str)
// 当 n != len(str) 时,返回非零错误
if err == nil && n != len(str) {
println(`Error Code:`, n)
panic(err)
}
}

遍历目录及子目录

package main

import (
"fmt"
"os"
"path/filepath"
"strings"
)

func main() {
files := make([]string, 0, 30)
err := filepath.Walk(`D:\`, func(filename string, fi os.FileInfo, err error) error {
if fi.IsDir() {
return nil
}
if strings.HasSuffix(strings.ToLower(fi.Name()), `.go`) {
files = append(files, filename)
}
return nil
})
if err != nil {
panic(err)
}
for _, file := range files {
fmt.Println(file)
}
}

参考

​https://studygolang.com/static/pkgdoc/pkg/os.htm​