Go语言读取海量文件

80 阅读1分钟

Go语言读取文件下的各种不同的文件

  1. 先读取获取指定路径文件夹
  2. 然后读取该路径下的所有的文件
  3. 然后挨个遍历这些文件
  4. 每遍历一个文件,就一行一行的读取。

下面直接上完整代码,copy到项目中就可以使用了

package main  
  
import (  
"bufio"  
"errors"  
"fmt"  
"os"  
"path/filepath"  
"strings"  
)  
  
var result = make(map[string]string, 0)  
  
func main() {  
// 定义要遍历的文件夹路径  
folderPath := "demo33-遍历读取每个文件/output"  
  
// 读取文件夹下的所有文件  
files, err := os.ReadDir(folderPath)  
if err != nil {  
fmt.Println("Error:", err)  
return  
}  
  
for k := range result {  
delete(result, k)  
}  
// 遍历每个文件并读取内容  
for _, file := range files {  
if !file.IsDir() {  
filePath := filepath.Join(folderPath, file.Name())  
  
// 打开文件  
f, err := os.Open(filePath)  
if err != nil {  
fmt.Printf("Error opening file %s: %s\n", filePath, err)  
continue  
}  
  
// 使用 bufio.NewScanner 来逐行读取文件内容  
scanner := bufio.NewScanner(f)  
for scanner.Scan() {  
// 打印每行内容  
str, err := SuberStr(scanner.Text())  
if err != nil {  
fmt.Println("截取数据源出错:" + err.Error())  
continue  
}  
fmt.Println("读取到每一行内容:", str)  
result[str] = str  
}  
  
if err := scanner.Err(); err != nil {  
fmt.Printf("Error reading file %s: %s\n", filePath, err)  
}  
  
// 关闭文件  
_ = f.Close()  
  
}  
}  
fmt.Println(result)  
}  
  
func SuberStr(originalStr string) (string, error) {  
spaceIndex := strings.Index(originalStr, " ")  
if spaceIndex == -1 {  
return "", errors.New("截取出来的长度等于-1,数据源不对!")  
}  
  
// 确保索引不会越界  
if spaceIndex+1 >= len(originalStr) {  
return "", errors.New("不能截取,数据长度小于等于索引长度了")  
}  
  
// 截取后面的网址部分  
urlPart := originalStr[spaceIndex+1:]  
  
//fmt.Println("Extracted URL:")  
//fmt.Println(urlPart)  
return urlPart, nil  
}