读取文件(带缓冲区)
readFile.go
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
// 打开文件
file, err := os.Open("/Users/jackey/Downloads/3.txt")
if err != nil {
fmt.Println("打开文件失败,", err)
}
// 当函数退出时,要及时关闭file
defer file.Close()
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
if err == io.EOF { //io.EOF 表示文件的末尾
break
}
fmt.Print(str)
}
fmt.Println("文件读取结束")
}
读取文件(不带缓冲区,适用于小文件)
readFile.go
package main
import (
"fmt"
"io/ioutil"
)
func main() {
// 使用ioutil.ReadFile一次性读取
file := "/Users/jackey/Downloads/3.txt"
content, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println("文件读取失败", err)
}
// 把读取到的内容显示到终端
fmt.Printf("%v", string(content))
// 没有显式的open文件,因此也不需要显式的close文件
// 文件的open和close被封装到ReadFile函数内部
}
创建文件并写入内容
file.go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
filePath := "/Users/jackey/Downloads/1.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)
if err != nil {
fmt.Println("打开文件失败")
return
}
// 及时关闭file句柄
defer file.Close()
str := "这里是写入内容,gopher.cc \n"
// 写入时,使用带缓存的 *Writer, 对于批量写入提高写入效率
writer := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
writer.WriteString(str)
}
// 内容是先写入到缓存的,因此需要调用 Flush方法,将缓存数据真正写入到文件中
writer.Flush()
}
OpenFile 几种打开文件方式的定义
const (
O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
O_RDWR int = syscall.O_RDWR // 读写模式打开文件
O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件
O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在
O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
)
文件copy
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func CopyFile(distFileName string, srcFileName string) (written int64, err error) {
srcFile, err := os.Open(srcFileName)
if err != nil {
fmt.Println("open file err ", err)
}
defer srcFile.Close()
// 通过srcFile 获取到 Reader
reader := bufio.NewReader(srcFile)
dstFile, err := os.OpenFile(distFileName, os.O_WRONLY | os.O_CREATE, 0666)
if err != nil {
fmt.Println("open file err ", err)
}
// 通过 dstFile 获取到 Writer
writer := bufio.NewWriter(dstFile)
defer dstFile.Close()
return io.Copy(writer, reader)
}
func main() {
srcFile := "/Users/jackey/Downloads/1.jpg" //源文件
dstFile := "/Users/jackey/Downloads/2.jpg" //copy后的文件
_, err := CopyFile(dstFile, srcFile)
if err != nil {
fmt.Println("copy 失败 ", err)
} else {
fmt.Println("copy 成功")
}
}
6 条评论
golang,只是有书,从来没有用过
用用吧,你会爱上她的。
祝你好运哈!
大佬求go资料!谢谢~
已发邮件,请查收
文章不错支持一下吧