1、打开和关闭文件
package main
import(
"fmt"
"os"
)
func main(){
//打开文件:
file,err := os.Open("d:/Test.txt");
if err != nil {//出错
fmt.Println("文件打开出错,对应错误为:",err)
}
//没有出错,输出文件:
fmt.Printf("文件=%v",file)
//.........一系列操作
//关闭文件:
err2 := file.Close();
if err2 != nil {
fmt.Println("关闭失败")
}
}
相关:
- 打开文件,打开成功则返回一个文件对象
//函数
func Open(name string)(file *File,err error)
- 关闭文件,使文件不能用于读写,返回可能出现的错误
//方法,限File对象调用
func(f *File) Close() error
2、IO
3、一次性读文件
- 使用ioutil包的ReadFile方法,将整个文件读入到内存
- 不适合大文件
package main
import(
"fmt"
"io/ioutil"
)
func main(){
//读取文件:
content,err := ioutil.ReadFile("d:/Test.txt")//返回内容为:[]byte,err
if err != nil {//读取有误
fmt.Println("读取出错,错误为:",err)
}
//如果读取成功,将内容显示在终端即可:
//fmt.Printf("%v",content)
fmt.Printf("%v",string(content))
}
在上面的程序中不需要进行 Open\Close操作,因为文件的打开和关闭操作被封装在ReadFile函数内部了
4、带缓冲区的读文件
- 带缓冲区
- 适合读大文件
package main
import(
"fmt"
"os"
"bufio"
"io"
)
func main(){
//打开文件:
file,err := os.Open("d:/Test.txt")
if err != nil {//打开失败
fmt.Println("文件打开失败,err=",err)
}
//当函数退出时,让file关闭,防止内存泄露:
defer file.Close()
//创建一个流:
reader := bufio.NewReader(file)
//读取操作:
for {
str,err := reader.ReadString('\n')//读取到一个换行就结束
if err == io.EOF {//io.EOF 表示已经读取到文件的结尾
break
}
//如果没有读取到文件结尾的话,就正常输出文件内容即可:
fmt.Println(str)
}
//结束:
fmt.Println("文件读取成功,并且全部读取完毕")
}
5、写入文件
打开文件:
-
参数一:文件路径
-
参数二:文件打开模式,多选用 | 连接
-
参数三:权限控制(Linux下生效,Windows无效)
示例:
package main
import(
"fmt"
"os"
"bufio"
)
func main(){
//写入文件操作:
//打开文件:
file , err := os.OpenFile("d:/Demo.txt",os.O_RDWR | os.O_APPEND | os.O_CREATE,0666)
if err != nil {//文件打开失败
fmt.Printf("打开文件失败",err)
return
}
//及时将文件关闭:
defer file.Close()
//写入文件操作:---》IO流---》缓冲输出流(带缓冲区)
writer := bufio.NewWriter(file)
for i := 0; i < 10;i++ {
writer.WriteString("你好 Golang\n")
}
//流带缓冲区,要刷新流--->才会真正写入文件中:
writer.Flush()
}
关于权限,不想算可以:
s :=os.FileMode(0666).String()
fmt.Println(s)
6、文件复制
package main
import(
"fmt"
"io/ioutil"
)
func main(){
//定义源文件:
file1Path := "d:/Demo.txt"
//定义目标文件:
file2Path := "d:/Demo2.txt"
//对文件进行读取:
content,err := ioutil.ReadFile(file1Path)
if err != nil {
fmt.Println("读取有问题!")
return
}
//写出文件:
err = ioutil.WriteFile(file2Path,content,0666)
if err != nil {
fmt.Println("写出失败!")
}
}