文件 io

文件操作

package main

import (
    "fmt"
    "os"
)

func main() {
    /*
    FileInfo:文件信息
        interface
            Name():文件名
            Size():文件大小,單位字節(jié)
            IsDir():是否為目錄
            ModTime():修改時(shí)間
            Mode():權(quán)限
    */
    fileinfo,err := os.Stat("/Users/isuntong/Documents/test/a/abc.txt")
    if err != nil {
        fmt.Println("err:",err)
        return
    }
    fmt.Printf("%T\n",fileinfo) // *os.fileStat

    //文件名
    fmt.Println(fileinfo.Name()) //abc.txt

    //大小
    fmt.Println(fileinfo.Size()) //12

    //是不是目錄
    fmt.Println(fileinfo.IsDir()) //false

    //修改時(shí)間
    fmt.Println(fileinfo.ModTime()) //2020-03-17 11:55:30.703993888 +0800 CST

    //權(quán)限
    fmt.Println(fileinfo.Mode()) //-rw-r--r--


}
package main

import (
    "fmt"
    "os"
    "path"
    "path/filepath"
)

//4
func main() {
    /*
    文件操作:
    1.路徑:
        相對(duì)路徑:relative
            相對(duì)于當(dāng)前工程:abc.txt
        絕對(duì)路徑:absolute
            /Users/isuntong/Documents/test/a/abc.txt

        .當(dāng)前目錄
        ..上一層
    */
    //1辑莫。路徑
    fileName1 := "/Users/isuntong/Documents/test/a/abc.txt"
    fileName2 := "ab.txt"
    //是否是絕對(duì)路徑
    fmt.Println(filepath.IsAbs(fileName1)) //true
    fmt.Println(filepath.IsAbs(fileName2)) //false
    fmt.Println(filepath.Abs(fileName1)) ///Users/isuntong/Documents/test/a/abc.txt <nil>
    fmt.Println(filepath.Abs(fileName2)) ///Users/isuntong/go/src/demo/ab.txt <nil>

    fmt.Println("獲取父目錄:",path.Join(fileName1,"..")) //獲取父目錄: /Users/isuntong/Documents/test/a

    //2. 創(chuàng)建目錄 os.ModePerm權(quán)限
    err := os.Mkdir("/Users/isuntong/Documents/test/a/bb",os.ModePerm)
    if err != nil {
        fmt.Println("err:",err)
        // return
    }
    fmt.Println("文件夾創(chuàng)建成功")

    err2 := os.MkdirAll("/Users/isuntong/Documents/test/a/cc/dd/ee",os.ModePerm)
    if err2 != nil {
        fmt.Println("err:",err2)
        // return
    }
    fmt.Println("多層文件夾創(chuàng)建成功")

    //3枝笨。 創(chuàng)建文件 不存在創(chuàng)建剔桨,存在使其變?yōu)榭?    file1,err3 := os.Create("/Users/isuntong/Documents/test/a/ab.txt")
    if err3 != nil {
        fmt.Println("err:",err3)
        // return
    }
    fmt.Println(file1) //&{0xc0000b2120}

    //4。 打開文件 讓當(dāng)前程序和指定文件之間簡歷連接
    //os.open(filename)
    //os.openFile(filename,mode,perm)
    file3,err := os.Open(fileName1)
    fmt.Println(file3) //&{0xc000132180}

    file4,err := os.OpenFile(fileName1,os.O_RDONLY|os.O_WRONLY,os.ModePerm)
    fmt.Println(file4)

    //5. 關(guān)閉文件
    file4.Close()
    
    //6. 刪除文件或者文件夾
    // err := os.Remove("/Users/isuntong/Documents/test/a/ab.txt")
    // err := os.Remove("/Users/isuntong/Documents/test/a/") //刪除目錄树绩,如果不為空不能刪除
    // err := os.RemoveAll("/Users/isuntong/Documents/test/a/") //刪除目錄脚猾,謹(jǐn)慎使用
    
}

io讀操作

package main

import (
    "fmt"
    "io"
    "os"
)

//5
func main() {
    /*
    讀取數(shù)據(jù):
        Reader借口:
            Read(p [[byte)(n int,error)


    讀取本地abc.txt文件中的數(shù)據(jù)砰奕、

    */
    //1军援。 打開文件
    fileName := "/Users/isuntong/Documents/test/a/abc.txt"
    file,err := os.Open(fileName)
    if err != nil {
        fmt.Println("err:",err)
        return
    }

    //3胸哥。 關(guān)閉文件
    defer file.Close()

    //2空厌。 讀取數(shù)據(jù) abcdefghij
    bs := make([]byte,4,4)

/*
    //第一次讀取
    n,err := file.Read(bs)
    fmt.Println(err) //<nil>
    fmt.Println(n) //4
    fmt.Println(bs) //[97 98 99 100]
    fmt.Println(string(bs)) //abcd

    //第二次讀取
    n,err = file.Read(bs)
    fmt.Println(err) //<nil>
    fmt.Println(n) //4
    fmt.Println(bs) //[101 102 103 104]
    fmt.Println(string(bs)) //efgh

    //第三次讀取
    n,err = file.Read(bs)
    fmt.Println(err) //<nil>
    fmt.Println(n) //2
    fmt.Println(bs) //[105 106 103 104]
    fmt.Println(string(bs)) //ijgh

    //第四次讀取
    n,err = file.Read(bs)
    fmt.Println(err) //EOF
    fmt.Println(n) //0
    fmt.Println(bs) //[105 106 103 104]
    fmt.Println(string(bs)) //ijgh
*/

/*
   abcd
   efgh
   ij
   讀取到文件末尾,結(jié)束讀取操作
*/
    n := -1
    for {
        n,err = file.Read(bs)
        if n==0 || err == io.EOF{
            fmt.Println("讀取到文件末尾赋朦,結(jié)束讀取操作")
            break
        }
        fmt.Println(string(bs[:n]))
    }


}

io寫操作

package main

import (
    "fmt"
    "log"
    "os"
)

//6
func main() {
    /*
    寫出數(shù)據(jù):

    讀取本地abc.txt文件中的數(shù)據(jù)宠哄、

    */
    fileName := "/Users/isuntong/Documents/test/a/ab.txt"

    //1. 打開文件
    //file,err := os.Open(fileName) 沒有權(quán)限毛嫉,只有只讀承粤,寫的時(shí)候報(bào)錯(cuò)  bad file descriptor
    //O_APPEND 這樣就是追加密任,不是覆蓋
    file,err := os.OpenFile(fileName,os.O_CREATE|os.O_WRONLY|os.O_APPEND,os.ModePerm)
    if err != nil {
        fmt.Println("err",err)
        return
    }

    //3. 關(guān)閉文件
    defer file.Close()

    //2. 寫出數(shù)據(jù) 每次從頭開始寫浪讳,即覆蓋之前的n個(gè)
    bs := []byte{65,66,67,68,69,70} //ABCDEF
    //n,err := file.Write(bs)
    n,err := file.Write(bs[:2])
    fmt.Println(n) //2
    HandleErr(err)

    //直接寫出字符串
    n,err = file.WriteString("helloworld")
    fmt.Println(n) //10
    HandleErr(err)

    //換行
    file.WriteString("\n")
    n,err = file.Write([]byte("today"))


}

func HandleErr(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

復(fù)制文件

package main

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

//7
func main() {
   /*
   拷貝文件:

   讀取本地abc.txt文件中的數(shù)據(jù)、拷貝圖片什么的也可以

   */
   srcFile := "/Users/isuntong/Documents/test/a/ab.txt"
   destFile := "ab.txt"

   total,err := CopyFile1(srcFile,destFile) //拷貝完畢
   fmt.Println(total,err) //38 <nil>


}

//利用ioutil
func CopyFile3(srcFile,destFile string) (int,error) {
   bs,err := ioutil.ReadFile(srcFile)
   if err != nil {
       return 0,err
   }

   err = ioutil.WriteFile(destFile,bs,0777)
   if err != nil {
       return 0,err
   }
   return len(bs),nil

}

//使用io.Copy()方法 這種方法比較好
func CopyFile2(srcFile,destFile string) (int64,error) {
   file1,err := os.Open(srcFile)
   if err != nil {
       return 0,err
   }

   file2,err := os.OpenFile(destFile,os.O_WRONLY|os.O_CREATE,os.ModePerm)
   if err != nil {
       return 0,err
   }

   defer file1.Close()
   defer file2.Close()

   return io.Copy(file2,file1)

}


//用于通過io操作實(shí)現(xiàn)文件的拷貝辐真,返回值是拷貝的總數(shù)量(字節(jié))侍咱,錯(cuò)誤
func CopyFile1(srcFile,destFile string) (int,error) {
   file1,err := os.Open(srcFile)
   if err != nil {
       return 0,err
   }

   file2,err := os.OpenFile(destFile,os.O_WRONLY|os.O_CREATE,os.ModePerm)
   if err != nil {
       return 0,err
   }


   defer file1.Close()
   defer file2.Close()
   //讀寫
   bs := make([]byte,1024,1024)
   n := -1
   total := 0
   for {
       n,err = file1.Read(bs)
       if err == io.EOF || n == 0 {
           fmt.Println("拷貝完畢")
           break
       } else if err != nil {
           fmt.Println("出錯(cuò)了楔脯。昧廷。偎箫。")
           return total,err
       }
       total += n
       file2.Write(bs[:n])
   }
   return total,nil
}

斷點(diǎn)續(xù)傳

bufio包

func NewReader(rd io.Reader) *Reader

func NewReaderSize(rd io.Reader,size int) *Reader

ioutil包

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塔插,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伶授,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件违诗,死亡現(xiàn)場(chǎng)離奇詭異诸迟,居然都是意外死亡阵苇,警方通過查閱死者的電腦和手機(jī)绅项,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門快耿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來润努,“玉大人铺浇,你說我怎么就攤上這事鳍侣『鹩担” “怎么了凿可?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵惨驶,是天一觀的道長粗卜。 經(jīng)常有香客問我纳击,道長,這世上最難降的妖魔是什么纱昧? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任呜投,我火速辦了婚禮存璃,結(jié)果婚禮上纵东,老公的妹妹穿的比我還像新娘偎球。我一直安慰自己辑甜,他們只是感情好猫牡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布淌友。 她就那樣靜靜地躺著震庭,像睡著了一般你雌。 火紅的嫁衣襯著肌膚如雪拨拓。 梳的紋絲不亂的頭發(fā)上千元,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天幸海,我揣著相機(jī)與錄音,去河邊找鬼袜硫。 笑死挡篓,一個(gè)胖子當(dāng)著我的面吹牛婉陷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播官研,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼秽澳,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了戏羽?” 一聲冷哼從身側(cè)響起担神,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎始花,沒想到半個(gè)月后妄讯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年男韧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贩疙。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悲靴,死狀恐怖耸三,靈堂內(nèi)的尸體忽然破棺而出胳徽,到底是詐尸還是另有隱情,我是刑警寧澤箫爷,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏敬矩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一勤家、第九天 我趴在偏房一處隱蔽的房頂上張望乐设。 院中可真熱鬧,春花似錦肿男、人聲如沸如庭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春矢赁,著一層夾襖步出監(jiān)牢的瞬間豺憔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留非迹,地道東北人结闸。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓留夜,卻偏偏與公主長得像图甜,于是被迫代替她去往敵國和親愿卒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子琼开,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容