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