檢查文件是否存在 在此程式同目錄下創建log.txt文件,以檢測。 檢查文件是否不存在 讀取文件內容 在此程式同目錄下創建name.txt文件,以檢測。 寫入文件 在此程式同目錄下創建hello_world文件。 創建臨時文件 計算文件行數 在程式同目錄下創建"names.txt"文件,隨便寫幾行字 ...
檢查文件是否存在
在此程式同目錄下創建log.txt文件,以檢測。
package main
import (
"os"
"fmt"
)
func main() {
if _, err := os.Stat("log.txt"); err == nil {
fmt.Println("Log.txt file exists")
}
}
檢查文件是否不存在
package main
import (
"os"
"fmt"
)
func main() {
// IsNotExist函數定義:func IsNotExist(err error) bool
// 返回一個布爾值說明該錯誤是否表示一個文件或目錄不存在
if _, err := os.Stat("log.txt"); os.IsNotExist(err) {
fmt.Println("Log.txt file does not exist")
} else {
fmt.Println("Log.txt file exists")
}
}
讀取文件內容
在此程式同目錄下創建name.txt文件,以檢測。
package main
import (
"io/ioutil"
"fmt"
)
func main() {
contentBytes, err := ioutil.ReadFile("name.txt")
if err == nil {
// ReadFile返回[]byte
fmt.Println(string(contentBytes))
}
}
寫入文件
在此程式同目錄下創建hello_world文件。
package main
import (
"io/ioutil"
"fmt"
)
func main() {
hello := "Hello, World"
// WriteFile接受三個參數,要寫入的文件名,寫入的[]byte,以及寫入許可權
err := ioutil.WriteFile("hello_world", []byte(hello), 0644)
if err != nil {
fmt.Println(err)
}
}
創建臨時文件
package main
import (
"io/ioutil"
"fmt"
)
func main() {
helloWorld := "Hello, World"
// TempFile定義:func TempFile(dir, prefix string) (f *os.File, err error)
// 在dir目錄下創建一個新的、使用prefix為首碼的臨時文件,
// 以讀寫模式打開該文件並返回os.File指針。
file, err := ioutil.TempFile("", "hello_world_temp")
if err != nil {
panic(err)
}
// defer os.Remove(file.Name())
if _, err := file.Write([]byte(helloWorld)); err != nil {
panic(err)
}
fmt.Println(file.Name())
}
計算文件行數
在程式同目錄下創建"names.txt"文件,隨便寫幾行字。
package main
import (
"os"
"bufio"
"fmt"
)
func main() {
file, _ := os.Open("names.txt")
fileScanner := bufio.NewScanner(file)
lineCount := 0
for fileScanner.Scan() {
lineCount++
}
defer file.Close()
fmt.Println(lineCount)
}
讀取文件特定行
package main
import (
"os"
"bufio"
"fmt"
)
func main() {
fmt.Println(readLine(2))
}
func readLine(lineNumber int) string {
file, _ := os.Open("names.txt")
fileScanner := bufio.NewScanner(file)
lineCount := 0
for fileScanner.Scan() {
if lineCount == lineNumber {
return fileScanner.Text()
}
lineCount++
}
defer file.Close()
return ""
}
比較兩個文件的內容
package main
import (
"fmt"
"io/ioutil"
"bytes"
)
func main() {
one, err := ioutil.ReadFile("one.txt")
if err != nil {
panic(err)
}
two, err2 := ioutil.ReadFile("two.txt")
if err2 != nil {
panic(err2)
}
// Equal返回bool值
same := bytes.Equal(one, two)
fmt.Println(same)
}
刪除文件
package main
import "os"
func main() {
err := os.Remove("new.txt")
if err != nil {
panic(err)
}
}
複製或移動文件
package main
import (
"os"
"io"
)
func main() {
original, err := os.Open("original.txt")
if err != nil {
panic(err)
}
defer original.Close()
original_copy, err2 := os.Create("copy.txt")
if err2 != nil {
panic(err2)
}
defer original_copy.Close()
// Copy(1, 2) -> 把2拷貝到1
_, err3 := io.Copy(original_copy, original)
if err3 != nil {
panic(err3)
}
}
// 移動文件:拷貝之後利用os.Remove()刪除原文件
重命名文件
package main
import "os"
func main() {
os.Rename("old.txt", "new.txt")
}
刪除目錄及文件
package main
import (
"os"
"fmt"
)
func main() {
// Remove無法刪除非空文件夾,RemoveAll可以
err := os.RemoveAll("hello")
if err != nil {
panic(err)
}
}
列出目錄下所有文件
創建一個hello文件夾,在文件夾內創建兩個文件,main文件和hello文件夾併列。
.
├── hello
│ ├── 1.txt
│ └── 2.txt
└── main.go
package main
import (
"io/ioutil"
"fmt"
)
func main() {
files, err := ioutil.ReadDir("hello")
if err != nil {
panic(err)
}
for _, f := range files {
fmt.Println(f.Name())
}
}