go
文件的相關操做函數在os
包下,能夠查看os包官方文檔來學習。golang
建立文件和寫入須要用到兩個函數:函數
func Create(name string) (*File, error) func (f *File) Write(b []byte) (n int, err error)
具體的代碼以下:學習
package main import ( "log" "os" ) func main() { file, createErr := os.Create("/Users/deweixu/demo.txt") if createErr != nil { log.Fatal(createErr) } _, writeErr := file.Write([]byte("建立一個文件,並寫入內容。")) if writeErr != nil { log.Fatal(writeErr) } closeErr := file.Close() if closeErr != nil { log.Fatal(closeErr) } }
$ go run create_write.go
就會看到建立了文件demo.txt
, 並寫入了內容。spa
package main import ( "fmt" "log" "os" ) func main() { //打開文件 file, err := os.Open("/Users/deweixu/demo.txt") if err != nil { log.Fatal(err) } //建立一個緩衝區, 每次讀取1024 byte buf := make([]byte, 1024) for { len, readErr := file.Read(buf) if len == 0 { break } if readErr != nil { log.Fatal(err) } fmt.Printf("%s", string(buf)) } fmt.Print("\n") }
$ go run read.go
就能夠看見讀取成功。code
在
os
包下還有有關目錄的操做函數和其餘的功能,能夠查閱相關的文檔來學習使用。接口
package main import ( "log" "os" ) func main() { //建立一個新文件 dstFile, createErr := os.Create("/Users/deweixu/demo-cp.txt") if createErr != nil { log.Fatal(createErr) } //打開源文件 srcFile, openErr := os.Open("/Users/deweixu/demo.txt") if openErr != nil { log.Fatal(openErr) } //建立一個緩衝區, 每次讀取1024 byte buf := make([]byte, 1024) for { len, readErr := srcFile.Read(buf) if len == 0 { break } if readErr != nil { log.Fatal(readErr) } _, writeErr := dstFile.Write(buf) if writeErr != nil { log.Fatal(writeErr) } } //忽略Close 錯誤 dstFile.Close() srcFile.Close() }
go run cp.go
完成複製。圖片
由於File
實現了Writer
和Reader
接口,因此能夠調用io
和io/ioutil
包下的一些函數來操做文件,好比上面的複製功能能夠用io
包下的這些函數來實現文檔
func Copy(dst Writer, src Reader) (written int64, err error) func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error) func CopyN(dst Writer, src Reader, n int64) (written int64, err error)
具體代碼以下:get
package main import ( "io" "log" "os" ) func main() { //建立一個新文件 dstFile, createErr := os.Create("/Users/deweixu/demo-cp.txt") if createErr != nil { log.Fatal(createErr) } //打開源文件 srcFile, openErr := os.Open("/Users/deweixu/demo.txt") if openErr != nil { log.Fatal(openErr) } //建立一個緩衝區, 每次讀取1024 byte buf := make([]byte, 1024) _, cpErr := io.CopyBuffer(dstFile, srcFile, buf) if cpErr != nil { log.Fatal(cpErr) } //忽略Close 錯誤 dstFile.Close() srcFile.Close() }
File
是目錄仍是文件
os
包下還有關於目錄操做的函數,可查閱文檔使用,這裏說說區分文件和目錄的功能,須要用到stat
函數。string
package main import ( "fmt" "log" "os" ) func main() { file, err := os.Open("/Users/deweixu") if err != nil { log.Fatal(err) } fileInfo, statErr := file.Stat() if statErr != nil { log.Fatal(statErr) } isDir := fileInfo.IsDir() fmt.Printf("%t\n", isDir) }