os.Open()函數能夠打開一個文件,返回一個*File和一個err。
對得到的文件實例調用close()方法能關閉文件。package main
import (
"fmt"
"os"
)
func main() {
file,err := os.Open("main.go")
if err != nil{
fmt.Println("open file failed!err:",err)
return
}
//為了防止文件忘記關閉,我們通常使用defer注冊文件關閉語句
file.Close()
}
結果:
open file failed!err: open main.go: no such file or directory
Process finished with exit code 0main.go文件中的內容
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss基本使用
Read方法定義如下:
func (f *File) Read(b []byte) (n int, err error)
它接收一個字節切片,返回讀取的字節數和可能的具體錯誤,讀到文件末尾時會返回0和io.EOF。package main
import (
"fmt"
"io"
"os"
)
func main() {
file,err := os.Open("main.go")
if err != nil{
fmt.Println("open file failed!err:",err)
return
}
//為了防止文件忘記關閉,我們通常使用defer注冊文件關閉語句
defer file.Close()
var tmp = make([]byte,128)
n,err := file.Read(tmp)
if err == io.EOF{
fmt.Println("文件讀完了")
return
}
if err != nil{
fmt.Println("read file failed,err:",err)
}
fmt.Printf("讀取了%s字節數據\n",n)
fmt.Println(string(tmp[:n]))
}
結果:
讀取了%!s(int=128)字節數據
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所
Process finished with exit code 0從上面可以看出,只能讀取128字節的內容,并沒有全部讀取到。使用for循環讀取文件中的所有數據。package main
import (
"fmt"
"io"
"os"
)
func main() {
file,err := os.Open("main.go")
if err != nil{
fmt.Println("open file failed!err:",err)
return
}
//為了防止文件忘記關閉,我們通常使用defer注冊文件關閉語句
defer file.Close()
//存儲所有的數據
var content []byte
//存儲每次讀取的128字節數據
var tmp = make([]byte,128)
//循環讀取文件
for{
n,err := file.Read(tmp)
if err == io.EOF{
fmt.Println("文件讀完了")
break
}
if err != nil{
fmt.Println("read file failed,err:",err)
return
}
content = append(content,tmp[:n]...)
}
fmt.Println(string(content))
}
結果:
文件讀完了
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
Process finished with exit code 0bufio是在file的基礎上封裝了一層API,支持更多的功能。package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
// 只讀方式打開當前目錄下的main.go文件
file, err := os.Open("./main.txt")
if err != nil {
fmt.Println("open file failed!, err:", err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line,err := reader.ReadString('\n') //注意是字符
if err == io.EOF{
if len(line) != 0{
fmt.Println(line)
}
fmt.Println("文件讀完了")
break
}
if err != nil{
fmt.Println("read file failed,err:",err)
return
}
fmt.Print(line)
}
}
結果:
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
文件讀完了
Process finished with exit code 0io/ioutil包的ReadFile方法能夠讀取完整的文件,只需要將文件名作為參數傳入。package main
import (
"fmt"
"io/ioutil"
)
func main() {
content,err := ioutil.ReadFile("main.txt")
if err != nil{
fmt.Println("read file failed,err:",err)
return
}
fmt.Println(string(content))
}
結果:
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
少時誦詩書所所所所所所所所所
少時誦詩書所所所所所所所所所
main wenjain
少時誦詩書所所所所所所所所所
sssssss
Process finished with exit code 0os.OpenFile()函數能夠以指定模式打開文件,從而實現文件寫入相關功能。
func OpenFile(name string, flag int, perm FileMode) (*File, error) {
...
}
其中,
name:要打開的文件名。
flag:打開文件的模式。模式有以下幾種。
perm:文件權限,一個八進制數。r(讀)04,w(寫)02,x(執行)01。package main
import (
"fmt"
"os"
)
func main() {
file,err := os.OpenFile("write.txt",os.O_CREATE|os.O_TRUNC|os.O_WRONLY,0666)
if err != nil{
fmt.Println("open file failed,err:",err)
return
}
defer file.Close()
str := "hello vita"
file.Write([]byte(str)) //寫入字節切片數據
file.WriteString("hello lili") //直接寫入字符串數據
}
write.txt中內容
hello vitahello lilipackage main
import (
"bufio"
"fmt"
"os"
)
func main() {
file,err := os.OpenFile("write.txt",os.O_CREATE|os.O_TRUNC|os.O_WRONLY,0666)
if err != nil{
fmt.Println("open file failed,err:",err)
return
}
defer file.Close()
writer := bufio.NewWriter(file)
for i:=0;i<10;i++{
writer.WriteString("hello 麗麗")
}
writer.Flush()
}
write.txt中內容
hello 麗麗hello 麗麗hello 麗麗hello 麗麗hello 麗麗hello 麗麗hello 麗麗hello 麗麗hello 麗麗hello 麗麗package main
import (
"fmt"
"io/ioutil"
)
func main() {
str := "hello lili"
err := ioutil.WriteFile("./write.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file failed, err:", err)
return
}
}
write.txt中內容
hello lili借助io.Copy()實現一個拷貝文件函數。
src.txt中內容
src srcpackage main
import (
"fmt"
"io"
"os"
)
func CopyFile(dstName,srcName string)(written int64,err error) {
//以讀方式打開源文件
src,err := os.Open(srcName)
if err != nil{
fmt.Printf("open %s failed,err:%v.\n",srcName,err)
return
}
defer src.Close()
//以寫|創建的方式打開目標文件
dst,err := os.OpenFile(dstName,os.O_WRONLY|os.O_CREATE,0644)
if err != nil{
fmt.Printf("open %s failed,err:%v.\n",dstName,err)
return
}
defer dst.Close()
return io.Copy(dst,src)
}
func main() {
_,err := CopyFile("dst.txt","src.txt")
if err != nil{
fmt.Println("copy file failed,err:",err)
return
}
fmt.Println("copy done!")
}
結果:
copy done!
Process finished with exit code 0
dst中內容:
src srcdst.txt中內容
dst
src.txt中內容
src
注意:由于只有一行內容,所以必須要有換行,否則不出現內容。可以嘗試下哦~package main
import (
"bufio"
"flag"
"fmt"
"io"
"os"
)
func cat( r *bufio.Reader) {
for{
buf,err := r.ReadBytes('\n') //注意是字符,由于是讀取換行符,所以文件中必須有換行
if err == io.EOF{
break
}
fmt.Fprintf(os.Stdout, "%s",buf)
}
}
func main() {
flag.Parse()//解析命令行參數
if flag.NArg() == 0{
//如果沒有參數默認從標準輸入讀取內容
cat(bufio.NewReader(os.Stdin))
}
//依次讀取每個指定文件的內容并打印到終端
for i:=0;i<flag.NArg();i++{
f,err := os.Open(flag.Arg(i))
if err != nil{
fmt.Fprintf(os.Stdout,"reading from %s failed,err:%v\n",flag.Arg(i),err)
continue
}
cat(bufio.NewReader(f))
}
}
結果:
驅蚊器無群無群無 //輸入
驅蚊器無群無群無 //輸出
dst.txt //輸入
dst.txt //輸出
^C
Process finished with exit code 2
? test go build -o "args_demo"
? test ./args_demo dst.txt src.txt
dst
src
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
文章名稱:golang的文件讀寫操作-創新互聯
本文鏈接:http://www.yijiale78.com/article20/dgsico.html
成都網站建設公司_創新互聯,為您提供ChatGPT、微信小程序、搜索引擎優化、關鍵詞優化、網站內鏈、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯