创建文件
package main
func Create_File(){
f,err:=os.Create("test.txt")
if err != nil{
fmt.Println("创建文件失败",err)
return
}
defer f.Close()
fmt.Println("创建文件成功")
// 用字符串类型写入文件
f.WriteString("Hello World!\n")
// 用 byte 类型写入文件,这里要注意,用单引号,而且不能有中文
b :=[]byte{'H','e','l','l','o',' ','W','o','r','l','d'}
f.Write(b)
// 第二种方法,用切片转换
text:="Hello World!"
b1:=[]byte(text)
f.Write(b1)
// 读取数据
buf:=make([]byte,1024)
f.Read(buf)
}
打开文件
package main
/**
读写方式:
O_APPEND:追加
O_RDONLY: 只读
O_RDWR:可读可写
O_WRONLY:只写
O_CREATE:创建
*/
//第三个参数是权限,取值范围0-7
/**
0:没有任何权限
1:执行权限(如果是可执行文件,是可以运行的)
2:写权限
3:写权限与执行权限
4:读权限
5:读权限与执行权限
6:读权限与写权限
7:读权限,写权限,执行权限
*/
func Open_File(){
// 只读打开
f,err:=os.Open("test.txt")
if err !=nil{
fmt.Println("打开文件错误!")
return
}
// 关闭
defer f.Close()
}
func Open_File_Write(){
// 可读可写,不能创建
f,err:=os.Open("test.txt",os.O_RDWR,6)
// 可读可写,如果文件不存在自动创建
f,err:=os.Open("newtest.txt",os.O_RDWR|O_CREATE,6)
if err != nil{
fmt.Println("文件打开失败!")
return
}
defer f.Close()
// 写入数据
f.WriteString("写入一个字符串")
// 读取数据
buf:=make([]byte,1024)
f.Read(buf)
fmt.Println(string(buf))
}
读取文件
// 读取文件
func Read_File(){
f,err:=os.Open("test.txt")
if err != nil{
/**
系统打开文件个数限制是65535
所以重复打开同一个文件是可以的
1、文件不存在
2、文件权限
3、文件打开上限
*/
fmt.Println("文件打开失败!",err)
return
}
defer f.Close()
b:=make([]byte,1024)
f.Read(b)
fmt.Println(string(b))
}
// 循环读取
func For_Read_File(){
f,err:=os.Open("test.txt")
if err != nil{
fmt.Println("打开文件失败!",err)
return
}
defer f.Close()
b:=make([]byte,1024)
for {
n,error:=f.Read(b)
if error == io.EOF{ // -1
break
}
fmt.Println(string(b[:n]))
}
}
// 行读取
func Handle_Read_File(){
f,err:=os.Open("test.txt")
if err != nil{
fmt.Println("打开文件失败!",err)
return
}
defer f.Close()
scanner := bufio.NewScanner(f)
for scanner.Scan(){
// 这里二选一都可以
line:=scanner.Text()
// line:=scanner.Bytes()
fmt.Printf("%s\n",line)
}
if err := scanner.Err(); err!=nil{
log.Printf("读取文件报错:%s,err:[%v]","test.txt",err)
return
}
}
拷贝文件
func main(){
f_r,err:=os.Open("test.txt")
if err != nil {
fmt.Println("打开文件失败",err)
return
}
defer f_r.Close()
f_w,err:=os.Create("newtest.txt")
if err != nil {
fmt.Println("创建文件失败",err)
return
}
defer f_w.Close()
buf := make([]byte,1024)
// 循环从test文件中获取数据,写入newtest文件中
for{
n,err := f_r.Read(buf)
if err != nil && err == io.EOF {
fmt.Printf("读取完毕,n= %d\n",n)
return
}
f_w.Wtrte(buf[:n]) // 读多少,写多少
}
}