package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
//os.Open 只读方式打开
//fp,err:=os.Open("a.txt")
//os.OpenFile(文件名,打开方式,权限)
//打开方式: o_rdonly(只读模式) o_wronly(只写模式) o_rdwr(可读可写模式) o_append(追加模式)
//权限 0 没有任何权限 1 执行权限 2 写权限 3写权限和执行权限 4读权限 5读权限和执行权限 6 读权限和写权限 7读权限写权限执行权限
//fp,err:=os.OpenFile("a.txt",os.O_RDWR,6)
fp,err:=os.Create("a.txt")
if err!=nil{
fmt.Println("文件创建失败",err)
return
}
//1 \n不会换行 原因在windows文本文件中换行\r\n 回车
//fp.WriteString("hi\n")
//fp.WriteString("123\r\n")
//fp.WriteString("456")
//2
//slice:=[]byte{'a','b','c','d'}
slice:=[]byte("文件文件\r\n")
count,err1:=fp.Write(slice)
if err1!=nil{
fmt.Println("失败")
return
}else {
fmt.Println(count)
}
//3
//获取光标流位置
//获取文件起始到结尾有多少个字符
//count3,_:=fp.Seek(0,os.SEEK_END)
count3,_:=fp.Seek(0,io.SeekEnd)
//指定位置写入
fp.WriteAt([]byte("hello word"),count3)
fmt.Println(count3)
defer fp.Close()
fpd,err:=os.Open("a.txt")
if err!=nil{
fmt.Println("失败")
}
buf:=make([]byte,1024*2)
// 1 读取文件 块读取
//n,_:=fp.Read(buf)//读取的长度
//fmt.Println(string(buf[:n]))
//n,_=fp.Read(buf)
//fmt.Println(string(buf[:n]))
//2
for{
n,err:=fpd.Read(buf)
if err==io.EOF{//io.eof 文件结尾 返回值 errors.New("EOF")
break
}
fmt.Println(string(buf[:n]))
}
fmt.Println("----------分割线-----------------")
fpd.Seek(0,0)
//3 行读取
//创建文件缓冲区
r:=bufio.NewReader(fpd)
//截取标志‘\n’
sliceh,_:= r.ReadBytes('\n')
fmt.Println(string(sliceh))
fmt.Println("----------分割线-----------------")
fpd.Seek(0,0)
for {
//遇到‘\n’结束 但是‘\n’也读取进入
buf,errd:=r.ReadBytes('\n')
fmt.Println(string(buf))
if errd!=nil{
if errd==io.EOF{
break
}
fmt.Println("失败",errd)
}
}
fmt.Println("----------分割线-----------------")
fpd.Seek(0,0)
for{
str,err2:=r.ReadString('\n')
fmt.Println(str)
if(err2==io.EOF){
break
}
}
defer fpd.Close()
}
执行结果
14
14
文件文件
hello word
----------分割线-----------------
文件文件
----------分割线-----------------
hello word文件文件
hello word
----------分割线-----------------
文件文件
hello word
网友评论