GO语言学习---chapter12

2018-06-28  本文已影响0人  N_O_W

第12章  文件读写  2018.06.28-2018.06.29

主要涉及的库有  os  io  bufio

打开文件:

inputFile,err := os.Open(filename)  //这里inputFile将会是一个*File的指针,err返回打开文件时的错误信息

打开文件后,一定要注意需要关闭文件,通过下面的语句来实现

defer inputFile.Close()

然后创建一个reader

inputReader := bufio.NewReader(inputFile)  //建返回一个Reader指针

《1》读取一行:  line := inputReader.ReadLine()

《2》按照分隔符读取:  str ,err := inputReader.ReadString('\n')

《3》读取到缓冲区 

            buffer := make([]byte,1024)  //创建缓冲区

            n , error := inputReader.Read(buffer) //将数据读取到缓冲区,n表示读取到的字节数,error表示错误信息

《4》读取整个文件到缓冲区

            buffer,error := ioutil.ReadFile(inputFileName) //一次性将文件读取到缓冲区

            err := ioutil.WriteFile(outFileName,buffer,0x644) //将缓冲区的数据写到文件中

《5》从文件中读取一行到指定的变量中

          fmt.Fscanln(file,&var1,&var2,&var3)

《6》 读取压缩文件

            import "compress/gzip"    //引入压缩包

            file,err := os.Open(filename)    //打开文件,获取*File

            fz , err := gzip.NewReader(file)  //获取gzip Reader实例

            r ,  err := bufio.NewReader(fz)    //获取*Reader实例

            接下来的步骤和正常的读取步骤一样

《7》 文件写的过程

            outputFile, outputError := os.OpenFile(filename,O_WRITEONLY|O_CREATE,0666) //打开文件,设置打开方式及读写权限

            defer outputFile.Close()  //记得程序退出时关闭文件

            outputWriter := bufio.NewWriter(outputFile)  //获取一个*Writer

            outputWriter.WriteString("fuck you !") // 写入数据

            outputWriter.Flush()

《8》读取整个文件的过程可以使用ioutil.ReadFile

          写入整个文件的过程可以使用ioutil.WriteFile

《9》文件的复制  ioutil.Copy(dst,src)  //直接将src复制到dst ,这里需要注意参数的位置

《10》flag包可以帮助我们处理命令行参数

            type flag struct {

                Name string  //name as it appears on commandline

                Usage  string  // help message

                Value  Value  // value as set

                DefValue string  // default value (as text) ; for usage message

            }

获取命令行参数的个数:flag.NArg() 

获取第i个参数: flag.Arg(i)

《11》JSON 文件格式的读取(重点关注,尝试开源包)

        json的局限性:

                不是所有的类型都可以转成json

                json的key必须是string类型

                循环嵌套的数据类型不支持

                指针类型会被提取出内容并加封

            json encode数据的方法:   js,_ := json.Marshal(go_object) 

            json encode数据到文件中 :

            file , _ := os.OpenFile(filename,os.O_CREATE|os.O_WRITEOLY,0666)

            enc := json.NewEncoder(file) 

            err := enc.Encode(go_object) 

            json 的数据类型和 Go的数据类型的对应关系:

            bool  <----------->  json boolean

            float64 <------------>  json  numbers

            string  <-------------> json string 

            nil   <------------->  json null 

《12》XML文件格式的读取

            xml格式文件的读取类似于json格式的读取

            input :=  xmlcontentstring 

            inputReader := strings.NewReader(input)

            p:= xml.NewDecoder(inputReader) 

            for t,err = p.Token(); err == nil ; t ,err = p.Token(){

                switch token := t.(type) {

                case xml.StartElement:

                        name := token.Name.Local

                        fmt.Printf("Token name :%s \n",name)

                        for _ , attr :=range token.Attr {

                                attrName := attr.Name.Local

                                attrValue := attr.Value

                                fmt.Printf("An attribute is : %s %s \n",attrName,attrValue)

                        }

                case xml.EndElement:

                        name := token.Name.Local

                        fmt.Println("End of token",name)

                case xml.CharData:

                        content := string([]byte(token))

                        fmt.Printf("This is content : %v \n",content)

                default:

            }

        }

《13》GOB文件格式的读取

            gob是go binary format的简称,gob是go专属的二进制的格式,使用方法和json类似

《14》加密摘要算法的使用

sha1,md5 这些常用的必须掌握

hasher := md5.New()   // 创建算法的实例

b := []byte{}  //md5值的存储之地

io.WriteString(hasher,content)  //写入方式一

content := []byte("blablabla") 

nbytes , err := hash.Write(content)  //写入方式二

checksum := hasher.Sum(b) 

hasher.Reset()  //清空内容

上一篇 下一篇

猜你喜欢

热点阅读