@(go语言 黑马)[GO语言]
文件处理-行读取
- 题目:把一个文本文件一行一行读取出来
- 逻辑:见代码;
- 代码如下:
package main
import "fmt"
func LineRead() {
f, err := os.Open("C:\\Users\\shalom\\Desktop\\test\\源文件.txt") //打开文件,这里文件路径自己定义
if err != nil {
fmt.Println("文件打开失败!")
return
}
defer f.Close() //不要忘记关闭文件
r := bufio.NewReader(f)//创建一个reader
for {
buf, err := r.ReadBytes('\n')//代表读一行的意思,遇到'\n'函数就会返回一个字符切片
fmt.Println(string(buf))
if err!=nil{
if err == io.EOF {
//io.EOF是文件末尾的意思
fmt.Println("文件写入完毕!")
break
}else{
fmt.Println("ReadBytes err:",err)
return
}
}
}
func main() {
LineRead()
}
文件处理-大文件拷贝
- 题目:把一个500M左右的文件拷贝到目标路径中
- 逻辑:见代码;
- 代码如下:
package main
import "fmt"
//大文件复制
func Copy() {
f1, err := os.Open("F:\\黑马学习\\环境安装.rar")//打开需要复制的文件
if err != nil {
fmt.Println("文件打开失败!")
return
}
f2, err := os.Create("C:\\Users\\shalom\\Desktop\\test\\test.rar") //创建目标文件
if err != nil {
fmt.Println("文件创建失败!")
return
}
defer f1.Close() //不要忘记关闭文件
defer f2.Close() //不要忘记关闭文件
// 创建缓冲区(缓冲切片)
buf:=make([]byte,4096)
for { //因为一次只能够读取4096字节大小的数据,所以需要加上for循环
n,err:=f1.Read(buf)
f2.Write(buf[:n])
if err != nil {
if err == io.EOF { //当读到文件末尾的时候跳出循环
fmt.Println("文件读取完毕!")
break
}else {
fmt.Println("Read err:", err)
return
}
}
}
fmt.Println("文件Copy完成!")
}
func main() {
Copy()
}