package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
"strings"
)
func main() {
//fileClose()
//fileRead()
//fileReadClose()
//fileBufio()
//fileIoutil()
//fileWrite()
fileCopy()
}
func fileClose() {
//os.Open是只讀模式
fileObj, err := os.Open("D:\\360驅動大師目錄\\新建文本檔案.txt")
if err != nil {
panic(err)
}
//關閉檔案
fileObj.Close()
//一般情況下使用這種方式關閉檔案
defer fileObj.Close()
}
func fileRead() {
//os.Open是只讀模式
fileObj, err := os.Open("D:\\360驅動大師目錄\\新建文本檔案.txt")
if err != nil {
panic(err)
}
var fileBytes = make([]byte, 128)
n, err := fileObj.Read(fileBytes)
if err != nil {
panic(err)
}
fmt.Println(string(fileBytes[:n]))
//一般情況下使用這種方式關閉檔案
defer fileObj.Close()
}
// 雖然可以用中文代替變數 但是不推薦使用
func fileReadClose() {
//os.Open是只讀模式
fileObj, err := os.Open("D:\\360驅動大師目錄\\新建文本檔案.txt")
if err != nil {
panic(err)
}
//一般情況下使用這種方式關閉檔案
defer fileObj.Close()
var 罐子 []string
var 每次讀取位元組 = make([]byte, 128)
for {
n, err := fileObj.Read(每次讀取位元組)
//err == io.EOF表示讀完了,一定要放在err != nil前面
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
var 每次讀取字串 = string(每次讀取位元組[:n])
罐子 = append(罐子, 每次讀取字串)
}
fmt.Println(罐子)
}
func fileBufio() {
//os.Open是只讀模式
fileObj, err := os.Open("D:\\360驅動大師目錄\\新建文本檔案.txt")
if err != nil {
panic(err)
}
//一般情況下使用這種方式關閉檔案
defer fileObj.Close()
//需要將檔案物件傳進去
reader := bufio.NewReader(fileObj)
for {
//按行讀取
row, err := reader.ReadString('\n') //引數是字符,不是字串
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
fmt.Printf("%v", row)
}
}
func fileIoutil() {
//os.Open是只讀模式
bytes, err := ioutil.ReadFile("D:\\360驅動大師目錄\\新建文本檔案.txt")
if err != nil {
panic(err)
}
fmt.Println(string(bytes))
}
// 寫入2次內容 會把原來的內容覆寫掉
// os.O_WRONLY 只寫
// os.O_RDONLY 只讀
// os.O_CREATE 如果檔案不存在,則創建檔案
// os.O_RDWR 可讀可寫
// os.O_TRUNC 清空
// os.O_APPEND 追加檔案
func fileWrite() {
fileObj, err := os.OpenFile("D:\\360驅動大師目錄\\新建文本檔案.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
panic(err)
}
defer fileObj.Close()
content := "內容\n"
//Write方法需要將字串轉成位元組
fileObj.Write([]byte(content))
//WriteString直接寫入字串
fileObj.WriteString(content)
}
func fileWriteBufio() {
fileObj, err := os.OpenFile("D:\\360驅動大師目錄\\新建文本檔案.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
panic(err)
}
defer fileObj.Close()
var content = "內容\n"
writer := bufio.NewWriter(fileObj)
writer.Write([]byte(content))
writer.WriteString(content)
//寫完必須刷入
writer.Flush()
}
func fileWriteIoutil() {
var content = "內容\n"
err := ioutil.WriteFile("D:\\360驅動大師目錄\\新建文本檔案.txt", []byte(content), 0666)
if err != nil {
panic(err)
}
}
func fileCopy() {
原檔案, err := os.Open("D:\\360驅動大師目錄\\舊建文本檔案.txt")
if err != nil {
panic(err)
}
defer 原檔案.Close()
目標檔案, err := os.OpenFile("D:\\360驅動大師目錄\\新建文本檔案.txt", os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
panic(err)
}
defer 目標檔案.Close()
//拷貝檔案
io.Copy(目標檔案, 原檔案)
}
func ReadFile(filePath string, handle func(string)) error {
f, err := os.Open(filePath)
defer f.Close()
if err != nil {
return err
}
buf := bufio.NewReader(f)
for {
line, err := buf.ReadString('\n')
line = strings.TrimSpace(line)
handle(line)
if err != nil {
if err == io.EOF {
return nil
}
return err
}
return nil
}
}
func ReadBigFile(fileName string, handle func([]byte)) error {
f, err := os.Open(fileName)
if err != nil {
fmt.Println("can't opened this file")
return err
}
defer f.Close()
s := make([]byte, 4096)
for {
switch nr, err := f.Read(s[:]); true {
case nr < 0:
fmt.Fprintf(os.Stderr, "cat: error reading: %s\n", err.Error())
os.Exit(1)
case nr == 0: // EOF
return nil
case nr > 0:
handle(s[0:nr])
}
}
return nil
}
參考:https://mp.weixin.qq.com/s/eJvpKdn1oX4-HtroZsOEZQ
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/261785.html
標籤:區塊鏈
下一篇:小橙子的css近日總括
