一、檔案操作的基本API
func main() { //絕對路徑 fileInfo , err := os.Stat("E:/a.txt") fileInfo , err = os.Stat("E:/") if err !=nil { fmt.Println("err:" , err.Error()) } else { fmt.Printf("%T \n" , fileInfo) fmt.Printf("%v \n" , fileInfo) //檔案名 fmt.Println(fileInfo.Name()) //是否是目錄 fmt.Println(fileInfo.IsDir()) //檔案尺寸大小 fmt.Println(fileInfo.Size()) //mode 權限 fmt.Println(fileInfo.Mode()) //檔案最后修改時間 fmt.Println(fileInfo.ModTime()) }}
檔案路徑:
- 1、絕對路徑:absolute
- 2、相對路徑:relative 都是相當于當前的工程 (.當前目錄 ..上一層)
(1)、判斷是否是絕對路徑filepath.IsAbs()
(2)、獲取相對路徑filepath.Rel()
(3)、獲取絕對路徑filepath.Abs()
(4)、拼接路徑path.Join()
檔案操作:
1.創建檔案夾,如果檔案夾存在,創建失敗
- os.MKdir()
- os.MKdirAll()
2.創建檔案:如果檔案存在,會覆寫
- os.Create()-->*file
3.打開檔案:
- os.Open(filename)
- os.OpenFile(filename,mode,perm)
4.關閉檔案:
- file.Close()
5.洗掉:
- os.Remove()
- os.RemoveAll()

package mainimport ( "os" "fmt")func main() { /* 檔案操作: 1.創建檔案夾,如果檔案夾存在,創建失敗 os.MKdir() os.MKdirAll() 2.創建檔案:如果檔案存在,會覆寫 os.Create()-->*file 3.打開檔案: os.Open(filename) os.OpenFile(filename,mode,perm) 4.關閉檔案: file.Close() 5.洗掉: os.Remove() os.RemoveAll() */ // 1、創建目錄 fileName1 := "./test1" err := os.Mkdir(fileName1, os.ModePerm) if err != nil { fmt.Println("err:", err.Error()) } else { fmt.Printf("%s 目錄創建成功!\n", fileName1) } fileName2 := "./test2/abc/xyz" err = os.MkdirAll(fileName2, os.ModePerm) if err != nil { fmt.Println("err:", err.Error()) } else { fmt.Printf("%s 目錄創建成功!\n", fileName2) } //2、創建檔案.如果檔案已經存在,則檔案被覆寫 fileName3 := "./test1/abc.txt" file1, err := os.Create(fileName3) if err != nil { fmt.Println("err:", err.Error()) } else { fmt.Printf("%s 創建成功!%v \n", fileName3, file1) } // 3、打開檔案 file2, err := os.Open(fileName3) if err != nil { fmt.Println("err:", err.Error()) } else { fmt.Printf("%s 打開成功!%v \n", fileName3, file2) } /* 第一個引數:檔案名稱 第二個引數:檔案的打開方式 O_RDONLY:只讀模式(read-only) O_WRONLY:只寫模式(write-only) O_RDWR:讀寫模式(read-write) O_APPEND:追加模式(append) O_CREATE:檔案不存在就創建(create a new file if none exists.) 第三個引數:檔案的權限:檔案不存在創建檔案,需要指定權限 */ fileName4 := "./test1/abc2.txt" file4, err := os.OpenFile(fileName4, os.O_RDWR|os.O_CREATE, os.ModePerm) if err != nil { fmt.Println("err:", err.Error()) } else { fmt.Printf("%s 打開成功!%v \n", fileName4, file4) } //4、關閉檔案,程式與檔案的聯系斷開 file4.Close() // 5、洗掉檔案和目錄 fileName5 := "./test1" err = os.Remove(fileName5) if err != nil { fmt.Println(err) } else { fmt.Printf("%s 洗掉成功!" , fileName5) } err = os.RemoveAll(fileName5) if err != nil { fmt.Println(err) } else { fmt.Printf("%s 洗掉成功!" , fileName5) }}View Code
檔案讀寫

/**2.讀取檔案file.Read([]byte)-->n,err 從檔案中開始讀取資料,存入到byte切片中,回傳值n是本次實際讀取的資料量如果讀取到檔案末尾,n為0,err為EOF:end of file */func readFile(fileName string){ file2,err:=os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, os.ModePerm) if err!=nil{ fmt.Println(file2); }else { bs:=make([]byte,8,1024*8); n:= -1; str:=""; for{ n,err=file2.Read(bs); fmt.Printf("n:%v \n",n) if n==0||err==io.EOF{ fmt.Println("read file end") break; } str= strings.Join([]string{str,string(bs[:n])},"") } fmt.Println(str) } //3、關閉檔案 file2.Close()}func writeFile(fileName string){ str:="I Love China 我愛中國"; bs:=[]byte(str); file2,err:=os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, os.ModePerm) if err!=nil{ fmt.Println(file2); }else { file2.Write(bs); } file2.Close();}View Code
二、ioutil 包
/*
ioutil包:
ReadFile() //讀取檔案中的所有的資料,回傳讀取的位元組陣列
WriteFile() //向指定檔案寫入資料,如果檔案不存在,則創建檔案,寫入資料之前清空檔案
ReadDir() //讀取一個目錄下的子內容:子檔案和子目錄,但是僅有一層
TempDir() //在當前目錄下,創建一個以指定字串為前綴的臨時檔案夾,并回傳檔案夾路徑
TempFile() //在當前目錄下,創建一個以指定字串為前綴的檔案,并以讀寫模式打開檔案,并回傳os.File指標物件
*/

package mainimport ( "io/ioutil" "fmt" "os")func main() { /* ioutil包: ReadFile() //讀取檔案中的所有的資料,回傳讀取的位元組陣列 WriteFile() //向指定檔案寫入資料,如果檔案不存在,則創建檔案,寫入資料之前清空檔案 ReadDir() //讀取一個目錄下的子內容:子檔案和子目錄,但是僅有一層 TempDir() //在當前目錄下,創建一個以指定字串為前綴的臨時檔案夾,并回傳檔案夾路徑 TempFile() //在當前目錄下,創建一個以指定字串為前綴的檔案,并以讀寫模式打開檔案,并回傳os.File指標物件 */ //1、ReadFile() //讀取檔案中的所有的資料,回傳讀取的位元組陣列 fileName1 := "./files/blockchain.txt" data, err := ioutil.ReadFile(fileName1) if err != nil { fmt.Println("檔案打開例外", err.Error()) } else { fmt.Println(string(data)) } //2、WriteFile() //向指定檔案寫入資料,如果檔案不存在,則創建檔案,寫入資料之前清空檔案 fileName2 := "./files/xyz.txt" s1 := "Steven陪你學區塊鏈" err = ioutil.WriteFile(fileName2, []byte(s1), 0777) if err != nil { fmt.Println("寫入檔案例外", err.Error()) } else { fmt.Println("檔案寫入OK!") } //3、檔案拷貝 err = ioutil.WriteFile(fileName2 , data , os.ModePerm) if err != nil { fmt.Println("檔案拷貝例外", err.Error()) } else { fmt.Println("檔案拷貝成功!") } //4、ReadDir() //讀取一個目錄下的子內容:子檔案和子目錄,但是僅有一層 dirName := "./" fileInfos , err := ioutil.ReadDir(dirName) if err != nil { fmt.Println("目錄遍歷例外", err.Error()) } else { for i , v := range fileInfos { fmt.Println(i , v.Name() , v.IsDir() , v.Size() , v.ModTime()) } } //5、TempDir() //在當前目錄下,創建一個以指定字串為前綴的臨時檔案夾,并回傳檔案夾路徑 filename , err := ioutil.TempDir("./" , "temp") if err != nil { fmt.Println("創建目錄失敗" , err.Error()) } else { fmt.Println(filename) } //6、TempFile() //在當前目錄下,創建一個以指定字串為前綴的檔案,并以讀寫模式打開檔案,并回傳os.File指標物件 file1 , err := ioutil.TempFile(filename , "temp") if err != nil { fmt.Println("創建檔案失敗" , err.Error()) } else { file1.WriteString("寫入內容:" + file1.Name()) } file1.Close()}View Code
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/65067.html
標籤:Go

