在实际工作总很多时候,我们会经常用到导入txt文件,下面是一些简单的例子,仅供参考。
新建一个demo.txt文件,文件内容是:
1#张三 2#李四
按行读取文件内容
func main() { f, err := os.Open("demo.txt") if err != nil { fmt.Println("err:", err) return } defer f.Close() content, err := readTxt(f) if err != nil { fmt.Println("err:", err) return } fmt.Println("content:", content) } func readTxt(r io.Reader) ([]string, error) { reader := bufio.NewReader(r) l := make([]string, 0, 64) // 按行读取 for { line, _, err := reader.ReadLine() if err != nil { if err == io.EOF { break } else { return nil, err } } l = append(l, strings.Trim(string(line), " ")) } return l, nil }
输出结果:content: [1#张三 2#李四]
按行读取的第二种方式:
可以把 for 循环里的 reader.ReadLine() 替换成 r.ReadBytes('\n') 表示遇到 “\n” 就结束读取,这里要注意的是 “\n” 也会被读取到行内容,可以通过 strings.Replace 进行替换(strings.Replace(string(buf), "\n", "", 1))。
一次性读取 txt 文件全部内容
以下读取全部文件内容也可以使用 ioutil.ReadFile 方法
func main() { f, err := os.Open("demo.txt") if err != nil { fmt.Println("err:", err) return } defer f.Close() content, err := readAllContent(f) if err != nil { fmt.Println("err:", err) return } fmt.Println("content:", content) } func readAllContent(r io.Reader) ([]string, error) { var b = make([]byte, 4096) _, err := r.Read(b) if err != nil { return nil, err } l := strings.Split(string(b), "\r\n") return l, nil }
输出结果:content: [1#张三 2#李四]