一、读取小文件:ioutil.ReadFile()
读取文件的内容并显示在终端(使用ioutil一次将文件读取到内存中),这种方式适用于读取小文件:
package main
import (
"fmt"
"io/ioutil"
)
func main(){
content, error := ioutil.ReadFile("E:/a.txt")
if error != nil{
fmt.Println("读取出错,错误为:", error)
}
fmt.Printf("%v", string(content))
}
二、读取文件的内容并显示在终端(带缓存区的方式-4096字节)
适合读取比较大的文件,使用os.Open(),os.Close(),bufio.NewReader(),reader.ReadString()函数和方法:
package main
import (
"fmt"
"os"
"bufio"
"io"
)
func main(){
file, error := os.Open("E:/a.txt")
if error != nil{
fmt.Println("读取出错,错误为:", error)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
str, error := reader.ReadString('\n')
if error == io.EOF{
break
}
fmt.Println(str)
}
fmt.Println("文件读取成功,并且全部读取完毕。")
}
三、打开文件
func OpenFile()
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。
参数含义:
name:要打开的文件路径
文件打开模式:可以用“|”进行组合
FileMode代表文件的模式和权限位。这些字位在所有的操作系统都有相同的含义,因此文件的信息可以在不同的操作系统之间安全的移植。不是所有的位都能用于所有的系统,唯一共有的是用于表示目录的ModeDir位。
const (
// 单字符是被String方法用于格式化的属性缩写。
ModeDir FileMode = 1 << (32 - 1 - iota) // d: 目录
ModeAppend // a: 只能写入,且只能写入到末尾
ModeExclusive // l: 用于执行
ModeTemporary // T: 临时文件(非备份文件)
ModeSymlink // L: 符号链接(不是快捷方式文件)
ModeDevice // D: 设备
ModeNamedPipe // p: 命名管道(FIFO)
ModeSocket // S: Unix域socket
ModeSetuid // u: 表示文件具有其创建者用户id权限
ModeSetgid // g: 表示文件具有其创建者组id的权限
ModeCharDevice // c: 字符设备,需已设置ModeDevice
ModeSticky // t: 只有root/创建者能删除/移动文件
// 覆盖所有类型位(用于通过&获取类型位),对普通文件,所有这些位都不应被设置
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
ModePerm FileMode = 0777 // 覆盖所有Unix权限位(用于通过&获取类型位)
)
这些被定义的位是FileMode最重要的位。另外9个不重要的位为标准Unix rwxrwxrwx权限(任何人都可读、写、运行)。这些(重要)位的值应被视为公共API的一部分,可能会用于线路协议或硬盘标识:它们不能被修改,但可以添加新的位。
权限控制:unix/linux系统下才生效,windows下设置无效-0666
package main
import (
"fmt"
"os"
"bufio"
)
func main(){
file, error := os.OpenFile("E:/a.txt", os.O_RDWR | os.O_APPEND | os.O_CREATE, 0666)
if error != nil{
fmt.Println("读取出错,错误为:", error)
return
}
defer file.Close()
writer := bufio.NewWriter(file)
for i := 0; i<10; i++{
writer.WriteString("Hi, golang\n")
}
writer.Flush()
s := os.FileMode(0666).String()
fmt.Println(s)
}
四、复制文件
package main
import (
"fmt"
"io/ioutil"
)
func main(){
filePath1 := "E:/demo1.txt"
filePath2 := "E:/demo2.txt"
content, error := ioutil.ReadFile(filePath1)
if error != nil{
fmt.Println("读取有问题")
return
}
error = ioutil.WriteFile(filePath2, content, 0666)
if error != nil{
fmt.Println("写出失败")
}
}
标签:文件,读取,fmt,使用,golang,io,error,main,os From: https://www.cnblogs.com/arichman/p/16909752.html