GO基礎之文件操做

1、文件操做的基本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())
    }
}

文件路徑:數組

  • 一、絕對路徑:absolute
  • 二、相對路徑:relative 都是至關於當前的工程  (.當前目錄   ..上一層)

(1)、判斷是不是絕對路徑filepath.IsAbs()
(2)、獲取相對路徑filepath.Rel()
(3)、獲取絕對路徑filepath.Abs()
(4)、拼接路徑path.Join()app

文件操做:
1.建立文件夾,若是文件夾存在,建立失敗ide

  • os.MKdir()
  • os.MKdirAll()

2.建立文件:若是文件存在,會覆蓋區塊鏈

  • os.Create()-->*file

3.打開文件:spa

  • os.Open(filename)
  • os.OpenFile(filename,mode,perm)

4.關閉文件:指針

  • file.Close()

5.刪除:code

  • 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()
     */
    //     一、建立目錄
    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)
    }

    //二、建立文件.若是文件已經存在,則文件被覆蓋
    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)
    }

    //    三、打開文件
    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)
    }

    //四、關閉文件,程序與文件的聯繫斷開
    file4.Close()

    //    五、刪除文件和目錄
    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)
    }
    //三、關閉文件
    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

2、ioutil 包

/*
ioutil包:
ReadFile() //讀取文件中的全部的數據,返回讀取的字節數組
WriteFile() //向指定文件寫入數據,若是文件不存在,則建立文件,寫入數據以前清空文件
ReadDir() //讀取一個目錄下的子內容:子文件和子目錄,可是僅有一層
TempDir() //在當前目錄下,建立一個以指定字符串爲前綴的臨時文件夾,並返回文件夾路徑
TempFile() //在當前目錄下,建立一個以指定字符串爲前綴的文件,並以讀寫模式打開文件,並返回os.File指針對象
*/blog

package main

import (
    "io/ioutil"
    "fmt"
    "os"
)

func main() {
    /*
    ioutil包:
        ReadFile()   //讀取文件中的全部的數據,返回讀取的字節數組
        WriteFile()  //向指定文件寫入數據,若是文件不存在,則建立文件,寫入數據以前清空文件
        ReadDir()    //讀取一個目錄下的子內容:子文件和子目錄,可是僅有一層
        TempDir()   //在當前目錄下,建立一個以指定字符串爲前綴的臨時文件夾,並返回文件夾路徑
        TempFile()   //在當前目錄下,建立一個以指定字符串爲前綴的文件,並以讀寫模式打開文件,並返回os.File指針對象
     */
    //一、ReadFile()   //讀取文件中的全部的數據,返回讀取的字節數組
    fileName1 := "./files/blockchain.txt"
    data, err := ioutil.ReadFile(fileName1)
    if err != nil {
        fmt.Println("文件打開異常", err.Error())
    } else {
        fmt.Println(string(data))
    }

    //二、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!")
    }

    //三、文件拷貝
    err = ioutil.WriteFile(fileName2 , data , os.ModePerm)
    if err != nil {
        fmt.Println("文件拷貝異常", err.Error())
    } else {
        fmt.Println("文件拷貝成功!")
    }

    //四、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())
        }
    }

    //五、TempDir()   //在當前目錄下,建立一個以指定字符串爲前綴的臨時文件夾,並返回文件夾路徑
    filename , err := ioutil.TempDir("./" , "temp")
    if err != nil {
        fmt.Println("建立目錄失敗" , err.Error())
    } else {
        fmt.Println(filename)
    }

    //六、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
相關文章
相關標籤/搜索