向指定文件寫入數據,如果文件不存在,則創建文件,寫入數據之前清空文件 ...
一、文件操作的基本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 main import ( "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 main import ( "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