您的位置:首页 > 编程语言 > Go语言

golang学习的点点滴滴:读写文件(面向过程版)

2014-09-29 00:00 417 查看
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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: