转载自:https://www.cnblogs.com/guigujun/p/10206230.html。
创建一个空文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "log" "os" ) func main() { file, err := os.Create("empty.txt") if err != nil { log.Fatal("create file err", err) } log.Println(file) file.Close() } |
获取文件的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "fmt" "log" "os" ) func main() { fileInfo, err := os.Stat("main.go") if err != nil { log.Fatal(err) } fmt.Println("File Name:", fileInfo.Name()) fmt.Println("Size in bytes:", fileInfo.Size()) fmt.Println("Permissions:", fileInfo.Mode()) fmt.Println("Last modified:", fileInfo.ModTime()) fmt.Println("Is Directory:", fileInfo.IsDir()) fmt.Printf("System interface type:%T\v\n", fileInfo.Sys()) fmt.Printf("System info:%+v\n\n", fileInfo.Sys()) } |
重命名和移动文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "log" "os" ) func main() { originalPath := "empty.txt" newPath := "test.txt" err := os.Rename(originalPath, newPath) if err != nil { log.Fatal(err) } } |
删除文件
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import ( "log" "os" ) func main() { err := os.Remove("empty.txt") if err != nil { log.Fatal(err) } } |
打开关闭文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "log" "os" ) func main() { // 简单地打开文件 file, err := os.Open("test.txt") if err != nil { log.Fatal(err) } file.Close() file, err = os.OpenFile("test.txt", os.O_APPEND, 0666) if err != nil { log.Fatal(err) } file.Close() } |
打开文件的一些其他的操作
1 2 3 4 5 6 |
os.O_RDONLY // 只读 os.O_WRONLY // 只写 os.O_RDWR // 读写文件 os.O_APPEND // 追加文件 os.O_CREATE // 不存在时创建文件 os.O_TRUNC // 打开时截断文件 |
检查文件是否存在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "log" "os" ) var ( fileInfo *os.FileInfo err error ) func main() { fileInfo, err := os.Stat("test.txt") if err != nil { if os.IsNotExist(err) { log.Fatal("File does not exist.") } } log.Println("File does exist.File information: ") log.Println(fileInfo) } |
检查文件的读写权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package main import ( "log" "os" ) func main() { file, err := os.OpenFile("test.txt", os.O_WRONLY, 0666) if err != nil { if os.IsPermission(err) { log.Println("Error: Write permission denied.") } } file.Close() file, err = os.OpenFile("test.txt", os.O_RDONLY, 0666) if err != nil { if os.IsPermission(err) { log.Println("Error: Read permission denied.") } } file.Close() } |
改变文件的权限、所有权和时间戳
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
package main import ( "log" "os" "time" ) func main() { // 改变权限 err := os.Chmod("test.txt", 0777) if err != nil { log.Println(err) } // 改变所有权,适用于 Linux。Windows 不支持 err = os.Chown("test.txt", os.Getuid(), os.Getegid()) if err != nil { log.Println(err) } // 改变时间戳 twoDaysFromNow := time.Now().Add(48 * time.Hour) lastAccessTime := twoDaysFromNow lastModifyTime := twoDaysFromNow err = os.Chtimes("test.txt", lastAccessTime, lastModifyTime) if err != nil { log.Println(err) } } |
复制文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package main import ( "io" "log" "os" ) func main() { // 打开源文件 originalFile, err := os.Open("test.txt") if err != nil { log.Fatal(err) } defer originalFile.Close() // 创建新文件 newFile, err := os.Create("test_copy.txt") if err != nil { log.Fatal(err) } defer newFile.Close() // 文件复制 bytes, err := io.Copy(newFile, originalFile) if err != nil { log.Fatal(err) } log.Printf("Copied %d bytes.", bytes) err = newFile.Sync() if err != nil { log.Fatal(err) } } |
移动位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package main import ( "fmt" "log" "os" ) func main() { file, err := os.Open("test.txt") if err != nil { log.Fatal(err) } defer file.Close() var offset int64 = 5 var whence int = 0 newPos, err := file.Seek(offset, whence) if err != nil { log.Fatal(err) } fmt.Println("Just moved to 5:", newPos) newPos, err = file.Seek(-2, 1) if err != nil { log.Fatal(err) } fmt.Println("Just moved back two:", newPos) currentPos, err := file.Seek(0, 1) fmt.Println("current pos:", currentPos) newPos, err = file.Seek(0, 0) if err != nil { log.Fatal(err) } fmt.Println("position after seek 0, 0: ", newPos) } |
向文件中写入字节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "log" "os" ) func main() { file, err := os.OpenFile("test.txt", os.O_WRONLY | os.O_TRUNC | os.O_CREATE, 0666) if err != nil { log.Fatal(err) } defer file.Close() bytes := []byte("测试写入功能!") bw, err := file.Write(bytes) if err != nil { log.Fatal(err) } log.Printf("Wrote %d bytes.\n", bw) } |
快速写入文件
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import ( "io/ioutil" "log" ) func main() { err := ioutil.WriteFile("test.text", []byte("测试快速写入功能!"), 0666) if err != nil { log.Fatal(err) } } |
在写入时使用缓存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
package main import ( "bufio" "log" "os" ) func main() { file, err := os.OpenFile("test.txt", os.O_WRONLY, 0666) if err != nil { log.Fatal(err) } defer file.Close() buffer := bufio.NewWriter(file) bw, err := buffer.Write([]byte{65, 66, 67}) if err != nil { log.Fatal(err) } log.Printf("Bytes written: %d\n", bw) bw, err = buffer.WriteString("\n写入字符串") if err != nil { log.Fatal(err) } log.Printf("Bytes written: %d\n", bw) unflushedBuffer := buffer.Buffered() log.Printf("Bytes buffered: %d\n", unflushedBuffer) ba := buffer.Available() log.Printf("Available buffer: %d\n", ba) buffer.Flush() buffer.Reset(buffer) ba = buffer.Available() log.Printf("Available buffer: %d\n", ba) buffer = bufio.NewWriterSize(buffer, 8000) ba = buffer.Available() if err != nil { log.Fatal(err) } log.Printf("Available buffer: %d\n", ba) } |
从文件中读取 n 个字节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package main import ( "log" "os" ) func main() { file, err := os.Open("test.txt") if err != nil { log.Fatal(err) } defer file.Close() // 从文件中读取 16 个字节 bytes := make([]byte, 16) br, err := file.Read(bytes) if err != nil { log.Fatal(err) } log.Printf("number of bytes read: %d\n", br) log.Printf("Data read: %s\n", bytes) } |
读取文件中全部内容
1 |
data, err := ioutil.ReadAll(file) |
快速读取文件到内存中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package main import ( "log" "io/ioutil" ) func main() { data, err := ioutil.ReadFile("test.txt") if err != nil { log.Fatal(err) } log.Printf("Data read: %s\n", data) } |