标签:writer 文件操作 rdf exists ret 判断 shu 其它 文件夹
func FileRead(path string) {
file, err := os.Open(path)
if err != nil {
fmt.Println("open file err=", err)
}
rb := make([]byte, 1024, 1024)
for {
n, err := file.Read(rb)
if n == 0 || err == io.EOF {
fmt.Println("jieshu")
break
}
fmt.Println(string(rb[:n]))
}
err = file.Close()
if err != nil {
fmt.Println(err)
}
}
func Bufio(path string) {
file, err := os.Open(path)
if err != nil {
fmt.Println("open file err=", err)
}
defer file.Close()
/*
const (
defaultBufSize = 4096 //默认的缓冲区为4096
)
*/
// 创建一个 *Reader ,是带缓冲区的
reader := bufio.NewReader(file)
// 循环读取文件的内容
for {
str, err := reader.ReadString(‘\n‘) //读到一个换行就结束
if err == io.EOF { // io.EOF 表示文件的末尾
break
}
// 输出内容
fmt.Println(str)
}
fmt.Println("文件读取结束!")
}
func IoUtil(path string) {
// 使用ioutil.ReadFile 一次性将文件读取(不适合大文件操作)
filestr, err := ioutil.ReadFile(path) // filestr类型[]byte
if err != nil {
fmt.Println("open file err=", err)
}
// 把文件内容读取到终端
fmt.Println(string(filestr))
// 没有打开和关闭文件句柄,因为两个操作都封装到ReadFile函数内部
}
func WriteHello(path string) {
// 打开一个文件
/*
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 // 如果可能,打开时清空文件
)
*/
// 打开或者创建一个文件
file, err := os.OpenFile(path, os.O_CREATE|os.O_CREATE, 0644)
if err != nil {
fmt.Println("open file err=", err)
}
defer file.Close()
str := "hello,Sonfer!\r\n"
// 写入时 使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
writer.WriteString(str)
}
// 因为writer是带缓存,因此调用WriterString方法时,
// 内容先写到缓存的,所以调用Flush方法,将缓冲数据
// 真实写入到文件中,否则文件中没有数据!
writer.Flush()
}
func WriteAppend(path string) {
// 打开文件时追加内容,如果是os.O_TRUNC则清空文件内容在写入
file, err := os.OpenFile(path, os.O_RDWR|os.O_APPEND, 0644)
if err != nil {
fmt.Println("open file err=", err)
}
defer file.Close()
str := "追加的!\r\n"
writer := bufio.NewWriter(file)
for i := 0; i < 7; i++ {
writer.WriteString(str)
}
writer.Flush()
}
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func ReadWrite(srcpaht, despath string) {
rdfile, err := os.Open(srcpaht)
if err != nil {
fmt.Println("open rdfile err=", err)
}
rwfile, err := os.OpenFile(despath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
fmt.Println("open rwfile err=", err)
}
defer rdfile.Close()
defer rwfile.Close()
// 创建读写缓冲区
reader := bufio.NewReader(rdfile)
writer := bufio.NewWriter(rwfile)
for {
// 缓冲区中读取行数
str, err := reader.ReadString(‘\n‘)
if err == io.EOF {
break
}
// 缓冲区中写文件
writer.WriteString(str)
}
fmt.Println("over!")
}
func main() {
sorfile := "G:\\GO\\1.txt"
desfile := "G:\\GO\\2.txt"
ReadWrite(sorfile, desfile)
}
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
}
标签:writer 文件操作 rdf exists ret 判断 shu 其它 文件夹
原文地址:https://www.cnblogs.com/sonfer/p/12818799.html