读取文件
func ReadFile1() {
//这个读取文件最简单的办法。并且中文不会乱码。适用于读取小文件。
bytes, err := ioutil.ReadFile("./lyric.txt")
if err != nil {
fmt.Println("ReadFile error", err)
}
fmt.Println(string(bytes))
}
func ReadFile2() {
// 利用bufio读取文件。带有缓冲功能,性能更好!!
//os.Open是只读模式
fileObj, err := os.Open("./lyric.txt")
if err != nil {
panic(err)
}
//一般情况下使用这种方式关闭文件
defer fileObj.Close()
//需要将文件对象传进去
reader := bufio.NewReader(fileObj)
for {
//按行读取
row, err := reader.ReadString('\n') //参数是字符,不是字符串
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
fmt.Printf("%v", row)
}
}
写入文件
写入文件的话,我们就需要使用openFile这个方法打开文件
在开始之前呢,先记一下下面几种模式
os.O_WRONLY 只写
os.O_RDONLY 只读
os.O_CREATE 如果文件不存在,则创建文件
os.O_RDWR 可读可写
os.O_TRUNC 清空
os.O_APPEND 追加文件
func WriteFile1() {
//O_CREATE:如果不存在就创建 O_APPEND:追加 O_WRONLY:只写
fileObj, err := os.OpenFile("./lyric.txt", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
if err != nil {
panic(err)
}
defer fileObj.Close()
w_content := "整个世界越好一起逛\n"
//Write方法需要将字符串转成字节
fileObj.Write([]byte(w_content))
//WriteString直接写入字符串
fileObj.WriteString(w_content)
}
func WriteFile2() {
//O_CREATE:如果不存在就创建 O_APPEND:追加 O_WRONLY:只写
fileObj, err := os.OpenFile("./lyric.txt", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
if err != nil {
panic(err)
}
defer fileObj.Close()
w_content := "因为捞鱼的蠢游戏\n"
writer := bufio.NewWriter(fileObj)
//下面两种写入方式都可以
writer.Write([]byte(w_content))
writer.WriteString(w_content)
//写完必须刷入
writer.Flush()
}
//这个是最简单的,但是只能覆盖,不能追加
func WriteFile3() {
w_content := "you are good dog!\n"
//文件不存在会自动创建,存在的话会清空原有的文件内容再执行写入操作
err := ioutil.WriteFile("./lyric.txt", []byte(w_content), 0666)
if err != nil {
panic(err)
}
}
复制拷贝文件
//复制拷贝文件
func copyFile(dstFileName string, srcFileName string) (written int64, err error) {
srcFile, err := os.Open(srcFileName)
if err != nil {
fmt.Printf("open file error = %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 error = %v\n", err)
return
}
//通过dstFile,获取到WRITER
writer := bufio.NewWriter(dstFile)
//writer.Flush()
defer dstFile.Close()
return io.Copy(writer, reader)
}