Go基础编程实践(六)—— 文件
程序员文章站
2022-03-26 12:15:29
检查文件是否存在 在此程序同目录下创建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()) } }