2020-04-27 11:26:05 +08:00
|
|
|
|
/*
|
|
|
|
|
|
* @Author : huangzj
|
|
|
|
|
|
* @Time : 2020/4/26 14:55
|
|
|
|
|
|
* @Description: 文件读取工具
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2020-04-27 16:33:17 +08:00
|
|
|
|
package file
|
2020-04-27 11:26:05 +08:00
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"bufio"
|
2020-07-08 11:15:50 +08:00
|
|
|
|
"encoding/json"
|
2020-07-13 17:01:39 +08:00
|
|
|
|
"errors"
|
2020-04-27 11:26:05 +08:00
|
|
|
|
"fmt"
|
|
|
|
|
|
"io"
|
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
|
"os"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
* @param 文件地址
|
|
|
|
|
|
* @return string 文件内容
|
|
|
|
|
|
* @return FileError 报错信息
|
|
|
|
|
|
* @description 一次直接读取文件中的内容不进行中间处理
|
|
|
|
|
|
*/
|
2020-07-13 17:01:39 +08:00
|
|
|
|
func ReadInOnce(filePath string) (string, error) {
|
2020-04-27 11:26:05 +08:00
|
|
|
|
err, is, _ := IsFileExist(filePath)
|
|
|
|
|
|
if err != nil {
|
2020-07-13 17:01:39 +08:00
|
|
|
|
return "", err
|
2020-04-27 11:26:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
if !is {
|
2020-07-13 17:01:39 +08:00
|
|
|
|
return "", errors.New("非文件")
|
2020-04-27 11:26:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fd, iErr := ioutil.ReadFile(filePath)
|
|
|
|
|
|
if iErr != nil {
|
2020-07-13 17:01:39 +08:00
|
|
|
|
return "", iErr
|
2020-04-27 11:26:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return string(fd), nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
* @param filePath 文件地址
|
|
|
|
|
|
* @return string 读取的文件内容
|
|
|
|
|
|
* @return FileError 读取错误,如果没有错误返回nil
|
|
|
|
|
|
* @description 通过for循环去读取文件,这边提供一种读取方式,通过这种方式来处理对应读取的操作
|
|
|
|
|
|
*/
|
2020-07-13 17:01:39 +08:00
|
|
|
|
func ReadByCircle(filePath string) (string, error) {
|
2020-04-27 11:26:05 +08:00
|
|
|
|
var fs string
|
|
|
|
|
|
file, err := os.Open(filePath)
|
|
|
|
|
|
if err != nil {
|
2020-07-13 17:01:39 +08:00
|
|
|
|
return "", err
|
2020-04-27 11:26:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
defer file.Close()
|
|
|
|
|
|
|
|
|
|
|
|
inputReader := bufio.NewReader(file)
|
|
|
|
|
|
for {
|
|
|
|
|
|
inputString, readerError := inputReader.ReadString('\n')
|
|
|
|
|
|
if readerError == io.EOF {
|
|
|
|
|
|
if inputString != "" {
|
|
|
|
|
|
fs = fmt.Sprint(fs, inputString)
|
|
|
|
|
|
}
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
fs = fmt.Sprint(fs, inputString)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return fs, nil
|
|
|
|
|
|
}
|
2020-04-30 18:08:29 +08:00
|
|
|
|
|
2020-07-13 17:01:39 +08:00
|
|
|
|
func ReadFileLineNum(filePath string) (int, error) {
|
2020-04-30 18:08:29 +08:00
|
|
|
|
file, err := os.Open(filePath)
|
|
|
|
|
|
if err != nil {
|
2020-07-13 17:01:39 +08:00
|
|
|
|
return 0, err
|
2020-04-30 18:08:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
defer file.Close()
|
|
|
|
|
|
|
|
|
|
|
|
num := 0
|
|
|
|
|
|
inputReader := bufio.NewReader(file)
|
|
|
|
|
|
for {
|
|
|
|
|
|
_, readerError := inputReader.ReadString('\n')
|
|
|
|
|
|
if readerError == io.EOF {
|
|
|
|
|
|
num++
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
num++
|
|
|
|
|
|
}
|
|
|
|
|
|
return num, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-07-13 17:01:39 +08:00
|
|
|
|
func ReadFileLineNumExceptEmptyLine(filePath string) (int, error) {
|
2020-04-30 18:08:29 +08:00
|
|
|
|
file, err := os.Open(filePath)
|
|
|
|
|
|
if err != nil {
|
2020-07-13 17:01:39 +08:00
|
|
|
|
return 0, err
|
2020-04-30 18:08:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
defer file.Close()
|
|
|
|
|
|
|
|
|
|
|
|
num := 0
|
|
|
|
|
|
inputReader := bufio.NewReader(file)
|
|
|
|
|
|
for {
|
|
|
|
|
|
input, readerError := inputReader.ReadString('\n')
|
|
|
|
|
|
if readerError == io.EOF {
|
|
|
|
|
|
if input != "\r\n" && input != "" {
|
|
|
|
|
|
num++
|
|
|
|
|
|
}
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
if input != "\r\n" && input != "" {
|
|
|
|
|
|
num++
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return num, nil
|
|
|
|
|
|
}
|
2020-07-08 11:15:50 +08:00
|
|
|
|
|
|
|
|
|
|
//读取json文件内容
|
|
|
|
|
|
//这边发现就是说如果按照正常的文件读取方式来读取json文件,读取到的内容是乱码的
|
|
|
|
|
|
//所以这边通过加解码的方式来读取,返回一个json串出去
|
|
|
|
|
|
//外部的调用者通过解析转换成对应的结构体对象
|
|
|
|
|
|
//@param filePath 文件路径
|
|
|
|
|
|
func ReadJsonFile(filePath string) (string, error) {
|
|
|
|
|
|
filePtr, err := os.Open(filePath)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return "", err
|
|
|
|
|
|
}
|
|
|
|
|
|
defer filePtr.Close()
|
|
|
|
|
|
|
|
|
|
|
|
decoder := json.NewDecoder(filePtr)
|
|
|
|
|
|
sMap := make(map[string]interface{}, 0)
|
|
|
|
|
|
err = decoder.Decode(&sMap)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return "", err
|
|
|
|
|
|
}
|
|
|
|
|
|
bs, err := json.Marshal(sMap)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return "", err
|
|
|
|
|
|
}
|
|
|
|
|
|
return string(bs), nil
|
|
|
|
|
|
}
|