Go基础编程实践—— 文件
Posted gaiheilukamei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go基础编程实践—— 文件相关的知识,希望对你有一定的参考价值。
检查文件是否存在
在此程序同目录下创建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())
以上是关于Go基础编程实践—— 文件的主要内容,如果未能解决你的问题,请参考以下文章