go语言学习Go语言

Go语言(3)IO操作

2018-09-10  本文已影响0人  ms2018

Go语言(3)IO操作

创建文件夹

package main

import "os"

func main() {

    // 创建文件夹
    os.Mkdir("1", 777)
    

}

删除文件夹

package main

import "os"

func main() {

    //删除文件夹
    os.Remove("1")

}

检查文件是否存在

package main

import (
    "fmt"
    "os"
)

/**
    检查文件是否存在
 */
func FileExists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil {
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, err
}

func main() {

    f, _ := FileExists("1.txt")
    fmt.Println(f)
    
}

创建文件

package main

import "os"

func main() {
    os.Create("2.txt")
}

文件写入(io.WriteString)

package main

import (
    "io"
    "os"
)

func main() {

    file, _ := os.OpenFile("2.txt", os.O_APPEND, 0777)
    io.WriteString(file, "hello")
}

文件写入(ioutil.WriteFile)

package main

import (
    "io/ioutil"
)

func main() {
    
    ioutil.WriteFile("3.txt", []byte("hello"), 0666)
}

文件写入(File)

package main

import (
    "os"
)

func main() {
    f, _ := os.Create("4.txt")
    defer f.Close()
    f.Write([]byte("hello"))
    f.WriteString("world")
    f.Sync()
}

文件写入(bufio.NewWriter)

package main

import (
    "bufio"
    "os"
)

func main() {
    os.Create("5.txt")
    f, _ := os.OpenFile("5.txt", os.O_APPEND, 0777)
    w := bufio.NewWriter(f)
    w.WriteString("hello")
    w.Flush()
    f.Close()
}

删除文件

package main

import (
    "os"
)

func main() {
    os.Remove("5.txt")
}

文件重命名

package main

import "os"

func main() {

    os.Rename("1.jpg", "2.jpg")
}

文件拷贝

package main

import (
    "io"
    "os"
)

// 文件拷贝
// 目标文件
// 原文件
func CopyFile(dstName, srcName string) (written int64, err error) {
    src, err := os.Open(srcName)
    if err != nil {
        return
    }
    defer src.Close()
    dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
    if err != nil {
        return
    }
    defer dst.Close()
    return io.Copy(dst, src)
}

func main() {
    CopyFile("5.txt", "4.txt") // os.Args[1]为目标文件,os.Args[2]为源文件
}

文件切割

package main

import (
    "math"
    "os"
    "strconv"
)

const CHUNKSIZE int64 = 1024 * 64

func main() {

    // 获取文件的信息
    fileInfo, _ := os.Stat("xingkong.jpg")
    //计算每一个区块的大小
    num := int(math.Ceil(float64(fileInfo.Size()) / float64(CHUNKSIZE)))
    //打开文件
    fi, _ := os.OpenFile("xingkong.jpg", os.O_RDONLY, os.ModePerm)
    //
    b := make([]byte, CHUNKSIZE)
    //
    var i int64 = 1
    //
    for ; i <= int64(num); i++ {
        //移动指针
        fi.Seek((i-1)*(CHUNKSIZE), 0)

        if len(b) > int((fileInfo.Size() - (i-1)*CHUNKSIZE)) {
            //分配内存
            b = make([]byte, fileInfo.Size()-(i-1)*CHUNKSIZE)
        }

        //
        fi.Read(b)
        // 创建块的文件
        f, _ := os.OpenFile(strconv.Itoa(int(i))+".db", os.O_CREATE|os.O_WRONLY, os.ModePerm)
        //写入块文件
        f.Write(b)
        //关闭文件
        f.Close()
    }

}

文件合并

package main

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

func main() {

    fii, _ := os.OpenFile("1.jpg", os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm)

    for i := 1; i <= 85; i++ {
        f, err := os.OpenFile(strconv.Itoa(int(i))+".db", os.O_RDONLY, os.ModePerm)
        if err != nil {
            fmt.Println(err)
            return
        }
        b, _ := ioutil.ReadAll(f)
        fii.Write(b)
        f.Close()
    }

}
上一篇下一篇

猜你喜欢

热点阅读