Golang 操作
文件概念
![在这里插2述](https://i-blog.csdnimg.cn/blog_migrate/ed7f3a3261069e4690cf6555e64f05ef.png)
上图中,返回的这个file指针,有三种叫法:
文件对象、文件指针、文件句柄 都可以
我们在理解的时候,其实file就是一个指针,这样更容易理解。
文件的打开、关闭
file,err := os.Open("路径+文件名")
if err != nil{
...
}
err = file.Close()
if err != nil{
...
}
用带缓冲的Reader读取大文件
import "bufio"
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
fmt.Print(str)
if err == io.EOF {
break
}
}
一次性读取小文件
import "io/ioutil"
file := "d:/test.txt"
content, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println(err)
}
fmt.Printf("%v", string(content))
写文件
主要是这个函数
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
参数一:文件路径
参数二:打开方式
参数三:控制权限,linux下用,用到再说吧
打开方式
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_SYNC int = syscall.O_SYNC
O_TRUNC int = syscall.O_TRUNC
)
过程:
filePath := "d:/anc.txt"
file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666)
if err != nil {
fmt.Printf("Open is %v\n", err)
return
}
str := "鬼怪\n"
writer := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
writer.WriteString(str)
}
writer.Flush()
判断文件是否存在
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}