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

  

posted @ 2018-12-06 22:45  __Miracle  阅读(120)  评论(0编辑  收藏  举报