文件打开操作
const (
O_RDONLY int = syscall.O_RDONLY //只读模式打开文件
O_WRONLY int = syscall.O_WRONLY //只写模式打开文件
O_RDWR int = syscall.O_RDWR //读写模式打开文件
O_APPEND int = syscall.O_APPEND //写操作时将数据附加到文件尾部
O_CREATE int = syscall.O_CREAT //如果不存在将创建一个新文件
O_EXCL int = syscall.O_EXCL //和O_CREATE配合使用,文件必须不存在
O_SYNC int = syscall.O_SYNC //打开文件用于同步I/O
O_TRUNC int = syscall.O_TRUNC //如果可能,打开时清空文件
)
读取文件每一行
func main() {
file,err:=os.OpenFile("D:\\gocode\\test.txt",os.O_RDONLY,0666)
if err!=nil {
fmt.Println("Open file error: ",err)
return
}
defer file.Close() //关闭文件
reader:=bufio.NewReader(file) //带缓冲区的读写
for ; ; {
str,err:=reader.ReadString('\n') //循环读取一行
if err!=nil {
fmt.Println("read string failed,err: ",err)
return
}
fmt.Println("read string is %s: ",str)
}
}
读取整个文件
func main() {
fileName:="D:\\gocode\\mjygo\\test.txt"
file,err:=os.OpenFile(fileName,os.O_CREATE|os.O_RDWR,0666)
if err!=nil {
fmt.Println("Open file error: ",err)
return
}
defer file.Close() //关闭文件
buf,err:= ioutil.ReadAll(file) //读取整个文件
if err!=nil {
fmt.Fprintf(os.Stderr,"File Error: %s\n",err)
return
}
fmt.Printf("%s\n",string(buf))
}
文件末尾写入
func main() {
fileName:="D:\\gocode\\mjygo\\test11.json"
file,err:=os.OpenFile(fileName,os.O_CREATE|os.O_WRONLY,0755)
if err!=nil {
fmt.Println("error",err)
os.Exit(1)
}
defer file.Close()
fileString:="张三李四"
file.Seek(0,2) //最后增加
file.WriteString(fileString)
}
带缓冲的写入
func main() {
fileName:="D:\\gocode\\mjygo\\test11.json"
file,err:=os.OpenFile(fileName,os.O_CREATE|os.O_WRONLY,0755)
if err!=nil {
fmt.Println("error",err)
os.Exit(1)
}
defer file.Close()
fileWrite:=bufio.NewWriter(file)
fileString:="王麻子\n"
for i := 0; i<10; i++ {
fileWrite.WriteString(fileString)
}
fileWrite.Flush() //将缓冲中的数据写入下层的io.Writer接口(Flush方法)
}