file, err := os.Create("test.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 只读方式打开
file, err := os.Open("test.txt")
// 读写方式打开(如果不存在则创建)
file, err := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE, 0755)
// 直接写入字符串
_, err := file.WriteString("Hello, World!\n")
// 写入字节
data := []byte("Hello, World!\n")
_, err := file.Write(data)
// 使用bufio写入
writer := bufio.NewWriter(file)
_, err := writer.WriteString("Buffered write\n")
writer.Flush() // 确保所有缓冲数据写入底层io.Writer
// 读取整个文件
data, err := os.ReadFile("test.txt")
// 逐行读取
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
// 读取到缓冲区
buf := make([]byte, 1024)
n, err := file.Read(buf)
info, err := os.Stat("test.txt")
if err != nil {
log.Fatal(err)
}
fmt.Println("Name:", info.Name())
fmt.Println("Size:", info.Size())
fmt.Println("Mode:", info.Mode())
fmt.Println("ModTime:", info.ModTime())
fmt.Println("IsDir:", info.IsDir())
// 更改文件权限
err := os.Chmod("test.txt", 0644)
// 更改文件所有者
err := os.Chown("test.txt", os.Getuid(), os.Getgid())
// 创建硬链接
err := os.Link("original.txt", "hardlink.txt")
// 创建符号链接
err := os.Symlink("original.txt", "symlink.txt")
// 读取符号链接目标
target, err := os.Readlink("symlink.txt")
import "golang.org/x/sys/unix"
file, _ := os.OpenFile("test.txt", os.O_RDWR, 0666)
defer file.Close()
// 尝试获取排他锁
err := unix.Flock(int(file.Fd()), unix.LOCK_EX|unix.LOCK_NB)
if err != nil {
log.Fatal("File is locked by another process")
}
// 释放锁
unix.Flock(int(file.Fd()), unix.LOCK_UN)
import "golang.org/x/sys/unix"
file, _ := os.OpenFile("largefile.bin", os.O_RDWR, 0644)
defer file.Close()
info, _ := file.Stat()
size := info.Size()
// 映射到内存
data, err := unix.Mmap(int(file.Fd()), 0, int(size), unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
if err != nil {
log.Fatal(err)
}
// 使用映射的内存
copy(data, []byte("Hello from mmap"))
// 解除映射
unix.Munmap(data)
err := os.Mkdir("mydir", 0755)
// 递归创建多级目录
err := os.MkdirAll("path/to/dir", 0755)
entries, err := os.ReadDir(".")
for _, entry := range entries {
fmt.Println(entry.Name(), entry.IsDir())
}
// 更高效的方式
file, _ := os.Open(".")
defer file.Close()
names, _ := file.Readdirnames(0) // 0表示读取所有
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
fmt.Println(path, info.Size())
return nil
})
// 创建临时文件
tempFile, err := os.CreateTemp("", "example.*.txt")
// 创建临时目录
tempDir, err := os.MkdirTemp("", "example")
defer os.RemoveAll(tempDir) // 清理
os.ReadFile
和os.WriteFile
更方便bufio
缓冲读写可以提高小文件操作的性能希望这些信息对您在Linux环境下使用Golang进行文件操作有所帮助!