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的库

浙公网安备 33010602011771号