文章目录
- 1、打开和关闭文件
- 2、IO
- 3、一次性读文件
- 4、带缓冲区的读文件
- 5、写入文件
- 6、文件复制
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,errif 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("写出失败!")}
}