Go复制文件教程展示了如何在Golang中复制文件。我们展示了三种在Go中复制文件的方法。
我们使用ioutil.ReadFile
,ioutil.WriteFile
,io.Copy
,File.Read
,File.Write
函数复制文件。
$ go version go version go1.18.1 linux/amd64
我们使用Go版本1.18。
复制文件示例
在第一个示例中,我们使用了ioutil
包中的函数。
package main import ( "io/ioutil" "log" ) func main() { src := "words.txt" dest := "words2.txt" bytesRead, err := ioutil.ReadFile(src) if err != nil { log.Fatal(err) } err = ioutil.WriteFile(dest, bytesRead, 0644) if err != nil { log.Fatal(err) } }
ioutil.ReadFile
读取指定的文件并返回字节片中的内容。ioutil.WriteFile
将指定的字节片写入目标文件。
Go复制文件示例二
在第二个例子中,我们使用io.Copy
函数来复制一个文件。
package main import ( "io" "log" "os" ) func main() { src := "words.txt" dst := "words2.txt" fin, err := os.Open(src) if err != nil { log.Fatal(err) } defer fin.Close() fout, err := os.Create(dst) if err != nil { log.Fatal(err) } defer fout.Close() _, err = io.Copy(fout, fin) if err != nil { log.Fatal(err) } }
我们用os.Open
打开源文件,用os.Create
创建目标文件;这两个文件的句柄被传递给io.Copy
函数。
复制文件示例三
File.Read
从文件中读取最多len(b)
个字节,其中b
是一个字节片段。File.Write
函数将提供的字节切片写入目标文件。
package main import ( "io" "log" "os" ) func main() { src := "words.txt" dst := "words2.txt" buf := make([]byte, 1024) fin, err := os.Open(src) if err != nil { log.Fatal(err) } defer fin.Close() fout, err := os.Create(dst) if err != nil { log.Fatal(err) } defer fout.Close() for { n, err := fin.Read(buf) if err != nil && err != io.EOF { log.Fatal(err) } if n == 0 { break } if _, err := fout.Write(buf[:n]); err != nil { log.Fatal(err) } } }
我们创建了一个1024字节的缓冲区。在for循环中,我们将源文件中的字节读入缓冲区,并将缓冲区写入目标文件。当没有更多数据要读取时,File.Read
函数返回0,我们中断循环。
在本教程中,我们在Golang中复制了文件。
列出所有Go教程。