diff --git a/base/file/main.go b/base/file/main.go new file mode 100644 index 0000000..d2cddda --- /dev/null +++ b/base/file/main.go @@ -0,0 +1,74 @@ +package main + +import ( + "bufio" + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "path" + "strings" +) + +// 文件操作 + +func main() { + // 获取 go 安装目录 + cmd := exec.Command("go", "env", "GOROOT") + out, _ := cmd.Output() + goPath := strings.Replace(string(out), "\n", "", -1) + + f, err := os.Open(path.Join(goPath, "LICENSE")) + if err != nil { + fmt.Println(err) + os.Exit(-1) + } + defer func() { + _ = f.Close() + }() + + // 原始方法读取文件 + for { + // 读文件 + buf := make([]byte, 256) + read, err := f.Read(buf) + if err == io.EOF { + fmt.Println("读取完毕") + break + } + if err != nil { + return + } + + fmt.Printf("读取 %d 字节, 内容 => \n%s \n", read, buf) + } + + // 重置文件指针 + _, _ = f.Seek(0, 0) + + fmt.Println("=========================================================") + + // bufio 读取文件 + reader := bufio.NewReader(f) + for { + line, err := reader.ReadString('\n') + if err == io.EOF { + fmt.Println("读取完毕") + break + } + if err != nil { + return + } + + fmt.Printf("读取内容 => \n%s", line) + } + + _, _ = f.Seek(0, 0) + + fmt.Println("=========================================================") + + // 使用 ioutil 读取整个文件 + buf, _ := ioutil.ReadAll(f) + fmt.Printf("读取内容 => \n%s", buf) +}