Golang读取txt文件内容


在实际工作总很多时候,我们会经常用到导入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#李四]

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM