golang学习的点点滴滴:读写文件(面向过程版)
package main import ( "fmt" "bufio" "io" "os" "flag" "strconv" ) // 使用命令行 -in 默认为infile var in *string = flag.String("in", "infile", "input file name ...") var out *string = flag.String("out", "outfile", "output file name ...") func main() { // 解析命令行 flag.Parse() defer func() { // 如果发现异常... if ex := recover();nil!=ex { fmt.Println(ex) } }() value, err := read() if nil != err { // 抛出异常 panic(err) } write(value) } func write(value []int) (err error) { // 创建文件 file, err2 := os.Create(*out) if nil != err2 { err = err2 fmt.Println("error to create file...") return } // 不管怎么着,最后都关闭文件 defer file.Close() for _, res := range value { // 将int类型转化成string str := strconv.Itoa(res+2) // 将string写入file中 file.WriteString(str + "\n") } return nil } func read() (result []int, err error) { // 打开文件 file, err1 := os.Open(*in) if nil != err1 { err = err1 return } // 不管怎么着,最后都关闭文件 defer file.Close() // 从文件创建一个bufferreader br := bufio.NewReader(file) // 初始化一个数组切片 result = make([]int, 0) // 死循环 for { // 一行一行的读 line, isPrefix, err2 := br.ReadLine() if nil != err2 { // 读到文件结尾 if io.EOF == err2 { fmt.Println("finish read ...") } return } if isPrefix { break } // 将字符数组转化成字符串 str := string(line) // 将字符串转化成int value, err3 := strconv.Atoi(str) if nil != err3 { err = err3 break } // 像切片中追加 result = append(result, value) } // 返回结果 return }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。