1. 新建文件并向文件中写入
package main
import(
"fmt"
"bufio"
"os"
)
func main(){
// 先打开一个文件
filePath := "C:/Users/Administrator/Pictures/xiong.txt"
file,err := os.OpenFile(filePath,os.O_WRONLY | os.O_CREATE,0666)
if err != nil{
fmt.Printf("打开文件错误!",err)
return
}
// 写入hello
defer file.Close()
str := "hello,xiong\n"
writer := bufio.NewWriter(file)
for i := 0;i<5;i++{
writer.WriteString(str)
}
// 因为writer是带缓存的 所以需要将缓存的内容写到文件中
writer.Flush()
}
2. 读取文件中内容
一、没有缓存区的方式进行
package main
import(
"fmt"
"io/ioutil"
"log"
)
func main(){
// 使用ioutil.ReadFile 一次性读取 打开和关闭都已经被封装了
file := "C:/Users/Administrator/Pictures/xiong.jpg"
content,err := ioutil.ReadFile(file)
if err != nil{
log.Fatal("读取错误!")
}
fmt.Printf("content:%v",content) // []byte
}
二、直接进行读取
package main
import(
"fmt"
"bufio"
"io"
"os"
)
// 适合文件比较大的情况
func main(){
file,err := os.Open("C:/Users/Administrator/Pictures/xiong.jpg")
if err != nil{
fmt.Println("open file err=",err)
}
// 当函数退出时 关闭文件,否则会有内存泄漏
defer file.Close()
// 创建一个*reader,是带缓冲区的 默认的缓冲区大小是4096个字节
reader := bufio.NewReader(file)
for{
str,err := reader.ReadString('\n')
if err == io.EOF{ // 表示读取到文件的末尾了
break
}
// if err != nil{
// fmt.Println("err",err)
// }
fmt.Print(str)
}
fmt.Println("文件读取结束!!")
}
3. 将文件中清空后再写入
package main
import(
"fmt"
"bufio"
"os"
)
func main(){
// 先打开一个文件
filePath := "C:/Users/Administrator/Pictures/xiong.txt"
file,err := os.OpenFile(filePath,os.O_WRONLY | os.O_TRUNC,0666) // 清空
if err != nil{
fmt.Printf("打开文件错误!",err)
return
}
// 写入hello
defer file.Close()
str := "你好,熊\n"
writer := bufio.NewWriter(file)
for i := 0;i<10;i++{
writer.WriteString(str)
}
// 因为writer是带缓存的 所以需要将缓存的内容写到文件中
writer.Flush()
}
4. 在原来的内容上追加
package main
import(
"fmt"
"bufio"
"os"
)
func main(){
// 先打开一个文件
filePath := "C:/Users/Administrator/Pictures/xiong.txt"
file,err := os.OpenFile(filePath,os.O_WRONLY | os.O_APPEND,0666) // 清空
if err != nil{
fmt.Printf("打开文件错误!",err)
return
}
// 写入hello
defer file.Close()
str := "LIYUYUAN\n"
writer := bufio.NewWriter(file)
for i := 0;i<10;i++{
writer.WriteString(str)
}
// 因为writer是带缓存的 所以需要将缓存的内容写到文件中
writer.Flush()
}
5. 读写和追加同时进行
package main
import(
"fmt"
"bufio"
"os"
"io"
)
func main(){
// 先打开一个文件
filePath := "C:/Users/Administrator/Pictures/xiong.txt"
file,err := os.OpenFile(filePath,os.O_RDWR | os.O_APPEND,0666) // 清空
if err != nil{
fmt.Printf("打开文件错误!",err)
return
}
// 读取原来的内容
reader := bufio.NewReader(file)
for{
str,err := reader.ReadString('\n')
if err == io.EOF{
break
}
// 显示到终端
fmt.Print(str)
}
// 写入hello
defer file.Close()
str := "haha\n"
writer := bufio.NewWriter(file)
for i := 0;i<10;i++{
writer.WriteString(str)
}
// 因为writer是带缓存的 所以需要将缓存的内容写到文件中
writer.Flush()
}
6. 文件copy
// copy文件
package main
import(
"fmt"
"os"
"bufio"
"io"
)
// 自己编写一个函数 接受两个文件路径 srcFileName(源文件) dstFileName(目标文件)
func CopyFile(dstFileName string, srcFileName string)(written int64,err error){
srcfile,err := os.Open(srcFileName)
if err != nil{
fmt.Printf("open file err=%v\n",err)
}
// 在函数结束时关闭两个句柄
defer srcfile.Close()
// 通过srcfile,获取到Reader
reader := bufio.NewReader(srcfile)
// 打开dstFileName
dstfile,err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE,0666)
if err != nil{
fmt.Printf("open file err=%v",err)
return
}
// 获取到writer
writer := bufio.NewWriter(dstfile)
defer dstfile.Close()
return io.Copy(writer,reader)
}
func main(){
// 将图片拷贝到另一个文件中
srcFile := "C:/Users/Administrator/Pictures/xiong.jpg"
dstFile := "C:/Users/Administrator/Pictures/xiong3.jpg"
_,err := CopyFile(dstFile,srcFile)
if err != nil{
fmt.Println("copy出错!")
}
}