打开/关闭文件

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    // 只读方式打开当前目录下的main.go文件
    file, err := os.Open("./hello.txt")
    if err != nil {
        fmt.Println("open file failed!, err:", err)
        return
    }
    // 关闭文件
    file.Close()
}

读文件

file, err := os.Open("./hello.txt")
    if err != nil {
        fmt.Println("open file err :", err)
        return
    }
    defer file.Close()
    // 定义接收文件读取的字节数组
    var buf [128]byte
    var content []byte
    for {
        n, err := file.Read(buf[:])
        if err == io.EOF {
            // 读取结束
            break
        }
        if err != nil {
            fmt.Println("read file err ", err)
            return
        }
        content = append(content, buf[:n]...)
    }
    fmt.Println(string(content))

写文件

// 新建文件
file, err := os.Create("./hello.txt")
if err != nil {
	fmt.Println(err)
	return
}
defer file.Close()
for i := 0; i < 5; i++ {
	file.WriteString("ab\n")
	file.Write([]byte("cd\n"))
}

文件复制

// 打开源文件
srcFile, err := os.Open("./hello.txt")
if err != nil {
	fmt.Println(err)
	return
}
// 创建新文件
dstFile, err2 := os.Create("./world.txt")
if err2 != nil {
	fmt.Println(err2)
	return
}
// 缓冲读取
buf := make([]byte, 1024)
for {
	// 从源文件读数据
	n, err := srcFile.Read(buf)
	if err == io.EOF {
		fmt.Println("读取完毕")
		break
	}
	if err != nil {
		fmt.Println(err)
		break
	}
	//写出去
	dstFile.Write(buf[:n])
}
srcFile.Close()
dstFile.Close()

OpenFile方法

读文件

package main
 
import (
    "fmt"
    "os"
)
func main() {
    // 以读方式打开文件
	// 444为读
    file, err := os.OpenFile("./hello.txt", os.O_RDWR, 444)
    if err != nil {
        fmt.Println(err)
    }
	defer file.Close()
    buf := make([]byte, 1024)
    for {
        len, _ := openFile.Read(buf)
        if len == 0 {
            break
        }
	 fmt.Println(string(buf))
    }
}

写文件

package main
 
import (
    "fmt"
    "os"
)
func main() {
	// 666为读写
    file, err := os.OpenFile("./hello.txt", os.O_CREATE|os.O_WRONLY, 666)
    if err != nil {
        return
    }
    defer file.Close()
	file.Write([]byte("hello\n"))
}

OpenFile模式

模式含义
os.O_WRONLY只写
os.O_CREATE创建文件
os.O_RDONLY只读
os.O_RDWR读写
os.O_TRUNC清空
os.O_APPEND追加

bufio

读文件

package main
 
import (
    "bufio"
    "fmt"
    "io"
    "os"
)
 
func main() {
    file, err := os.Open("./hello.txt")
    if err != nil {
        return
    }
    defer file.Close()
	// 获取reader对象
    reader := bufio.NewReader(file)
    for {
        line, _, err := reader.ReadLine()
        if err == io.EOF {
            break
        }
        if err != nil {
            return
        }
        fmt.Println(string(line))
    }
}

写文件

package main
 
import (
    "bufio"
    "fmt"
    "io"
    "os"
)
 
func main() {
    file, err := os.OpenFile("./hello.txt", os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        return
    }
    defer file.Close()
    // 获取writer对象
    writer := bufio.NewWriter(file)
    for i := 0; i < 10; i++ {
        writer.WriteString("hello\n")
    }
    // 刷新缓冲区,强制写出
    writer.Flush()
}