os.File封装所有文件相关操作,之前讲的os.Stdin,os.Stdout,os.Stderr都是os.File
a.打开一个文件进行读操作: os.Open(name string) (
File, error)
b.关闭一个文件:File.Close()

打开后不用了一定要关闭!否则会造成资源泄漏。以linux为例:打开文件后内核创建一个文件句柄,不关,它一直存在。而,数量是有限制的!超过限制打开会出错的!


文件很小的情况下可以读取整个文件:


文件写入:
os.OpenFile(“output.dat”, os.O_WRONLY|os.O_CREATE, 0666)
第二个参数:文件打开模式:

os.O_WRONLY:只写os.O_CREATE:创建文件os.O_RDONLY:只读os.O_RDWR:读写os.O_TRUNC :清空
第三个参数:权限控制:
r ——> 004
w——> 002
x——> 001

不flush则只会写在内存不会写入磁盘!!!


os.Args是一个string的切片,用来存储所有的命令行参数
flag包的使用,用来解析命令行参数:
flag.BoolVar(&test, "b", false, "print on newline")
flag.StringVar(&str, "s", "", "print on newline")
flag.IntVar(&count, "c", 1001, "print on newline")




Json数据协议

导入包:Import “encoding/json”序列化: json.Marshal(data interface{})反序列化: json.UnMarshal(data []byte, v interface{})

package mainimport ( "bufio" "os" "fmt")func main() { file, err := os.Open("C:/test.log") if err != nil { fmt.Println(err) return } //一定要记得关闭 defer file.Close() reader := bufio.NewReader(file) str, _, err := reader.ReadLine() fmt.Println("输入的是:", string(str)) ff, _, err := reader.ReadLine() if err != nil { fmt.Println(err) return } fmt.Println("输入的是:", string(ff))}

输出:
输入的是: fffff
输入的是: 66666

Process finished with exit code 0
从文件读取一行行读取字符串,统计英文、数字、空格以及其他字符的数量(注意:该例子reader.ReadString('\n')以\n来分隔,所以文件末尾要是\n才能准确统计):

package mainimport ( "os" "fmt" "bufio" "io")//抽象一下type CharCount struct { ChCount int NumCount int SpaceCount int OtherCOunt int}func main() { file, err := os.Open("C:/test.log") if err != nil { fmt.Println(err) return } defer file.Close() var count CharCount reader := bufio.NewReader(file) for { str, err := reader.ReadString('\n') //如果读取到整个文件结尾了,会报EOF错误 if err == io.EOF { break } if err != nil { fmt.Println(err) break } //字符数组统计(而不是字节),所以要转换为字符数组 runeArr := []rune(str) for _, v := range runeArr { switch { case v >= 'a' && v <= 'z': fallthrough //放行到下面的case一起计数 case v >= 'A' && v <= 'Z': count.ChCount++ case v == ' ' || v == '\t': count.SpaceCount++ case v >= '0' && v <= '9': count.NumCount++ default: count.OtherCOunt++ } } } fmt.Println("英文字符个数:", count.ChCount) fmt.Println("数字个数:", count.NumCount) fmt.Println("空格个数:", count.SpaceCount) fmt.Println("其他个数:", count.OtherCOunt)}