标签:for ret return 文件 读取 字符 file fail def
1、使用os包读取文件的内容
// 自定义每次读取数据长度 func ReadFileFromOS() { file, err := os.Open("./abc") if err != nil { fmt.Printf("open file fail,err: %+v\n", err) return } // 关闭文件 defer file.Close() // 定义一个长度为10的切片 b := make([]byte, 10) for { n, err := file.Read(b) // _, err := file.Read(b) if err == io.EOF { // EOF表示end of file,文件读取完毕 return } if err != nil { fmt.Printf("read file fail,err: %+v\n", err) return } // 打印读出的内容 // 将切片转化为string,然后打印 fmt.Printf("读取字节数:%d\n", n) fmt.Print(string(b)) } }
在方法file.Read(b)中,入口参数是一个切片,切片的长度就是每次从文件中读取数据打长度,当文件中剩余内容小于这个切片的长度的时候,就读文件的剩下的内容,而不是切片的长度那样多的内容。当文件读到最后的时候,file.Read()返回一个文件结束信息,io.EOF
2、使用bufio包读取文件内容
bufio也是一个可以用来读取文件的包
// 使用bufio包读文件 func ReadFileFromBufio() { file, err := os.Open("./abc") if err != nil { fmt.Printf("open file fail,err: %+v\n", err) return } // 关闭文件 defer file.Close() newReader := bufio.NewReader(file) for { // 使用函数ReadString(‘\n‘)表示每次读取一个字符串,遇到‘\n‘表示读取当前字符串结束 line, err := newReader.ReadString(‘\n‘) if err == io.EOF { return } if err != nil { fmt.Printf("read file fail,err: %+v\n", err) } fmt.Print(line) } }
使用这种方法就是创建一个Reader变量,用来读取文件内容,Reader包含的方法包括ReadLine,ReadString等等,同样的读到文件最后会返回文件结束符io.EOF
3、使用io/ioutil包一次性读取文件内容,这个方法比较简单
// 使用io/ioutil包读取文件内容 func ReadFileFromIOutil() { // content是一个byte类型的切片 content, err := ioutil.ReadFile("./abc") if err != nil { fmt.Printf("read file fail,err: %+v\b", err) return } fmt.Println(string(content)) }
它可以一次性读取文件的所有内容,而不需要使用循环来读取
标签:for ret return 文件 读取 字符 file fail def
原文地址:https://www.cnblogs.com/gyyyl/p/12786721.html