Go遍历目录、读写、追加文本文件
原创
©著作权归作者所有:来自51CTO博客作者小龙在山东的原创作品,请联系作者获取转载授权,否则将追究法律责任
Go 1.16 包io/ioutil已经被deprecated了。io/ioutil中的"函数/方法/类型"应该用包io以及os中的相应对象替代。
遍历一级目录
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