glang檔案讀寫

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

go檔案的相關操作函數在os包下,可以查看os包官方文檔來學習。

建立檔案並寫入內容

建立檔案和寫入需要用到兩個函數:

 func Create(name string) (*File, error) func (f *File) Write(b []byte) (n int, err error)

具體的代碼如下:

package mainimport (    "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, 並寫入了內容。

讀取檔案內容

package mainimport (    "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就可以看見讀取成功。

os包下還有有關目錄的操作函數和其他的功能,可以查閱相關的文檔來學習使用。

複製檔案

package mainimport (    "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實現了WriterReader介面,所以可以調用ioio/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)

具體代碼如下:

package mainimport (    "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函數。

package mainimport (    "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)}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.