Go之路(二十一):文件读写
文件读写
如果文件较小可以用io/ioutil
统计文件中字符字母空格符号的例子:
package main import ( "fmt" "bufio" "os" "io" ) type Count struct{ space int symbol int digital int alphabet int } func main() { var count Count file, _ := os.Open("C:/Users/Miralce/Desktop/123.txt") reader := bufio.NewReader(file) defer file.Close() for{ data,err := reader.ReadString('\n') if err == io.EOF{ fmt.Println(count) break } content := []rune(data) for _,v := range content{ switch { case v > 'a'&& v<'z': fallthrough case v>'A'&&v<'Z': count.alphabet++ case v == ' ': count.space++ case v > '0' && v<'9': count.digital++ default: count.symbol++ } } } fmt.Println(count.alphabet) fmt.Println(count.space) fmt.Println(count.digital) fmt.Println(count.symbol) }
1.当文件读完的时候,用err==io.EOF判断
2.文件打开后要记得关闭,可以defer file.close()
io/util
文档写的比较详细,或者直接看例子
与bufio不同的是它是直接读取整个文件的内容,从磁盘上
package main import ( "fmt" "io/ioutil" ) func main() { filename := "C:/Users/邓磊/Desktop/123.txt" data, err := ioutil.ReadFile(filename) if err != nil{ fmt.Print("出错了") return } fmt.Print(string(data)) }
文件写入的例子:
package main import( "fmt" "bufio" "os" ) func main() { file, err := os.OpenFile("C:/Users/邓磊/Desktop/456.txt", os.O_CREATE|os.O_RDWR,0666) if err != nil { fmt.Print(err) } defer file.Close() f := bufio.NewWriter(file) for i :=0;i<10;i++{ f.WriteString("hello") f.WriteString("\r\n") // windows下需要用/r/n } f.Flush() }
1.windows下换行需要用/r/n
2.因为是写入到缓冲区,所以写完之后要flush一下才能把数据刷到磁盘里
3.对于压缩文件,文档里有各种zip的库