zoukankan      html  css  js  c++  java
  • Go语言fmt、os、ioioutil、bufio包

    fmt、os、ioioutil、bufio包是与系统、文件、输入输出相关的包

    一、os包

    os包是与操作系统有关的包。

    os包提供了操作系统函数的不依赖平台的接口。设计为Unix风格的,虽然错误处理是go风格的;失败的调用会返回错误值而非错误码。通常错误值里包含更多信息。

    系统级的操作如获取系统信息等可查阅文档,主要讨论对文件系统的操作。

    主要结构体

    type File struct {
        // 内含隐藏或非导出字段
    }
    
    
    type FileInfo interface {
        Name() string       // 文件的名字(不含扩展名)
        Size() int64        // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
        Mode() FileMode     // 文件的模式位
        ModTime() time.Time // 文件的修改时间
        IsDir() bool        // 等价于Mode().IsDir()
        Sys() interface{}   // 底层数据来源(可以返回nil)
    }
    
    //FileInfo可以通过Stat()函数得到,如下
    
    	fileInfo, _ := os.Stat("hello.txt")
    
    	//通过方法返回文件信息
    	isDir := fileInfo.IsDir()
    	size:= fileInfo.Size()
    
    	fmt.Println("isDir: ",isDir)
    	fmt.Println("size :",size)
    
    

    文件打开模式

    const (
        O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
        O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
        O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
        O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
        O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
        O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在
        O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
        O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
    )
    

    文件权限模式

    type FileMode uint32
    FileMode代表文件的模式和权限位。
    0666代表任何人可读可写但不可执行。
    

    File方法

    File的方法最多,有创建打开以及读写等方法。

    OpenFile系列方法

    OpenFile需要传入三个参数,文件名、文件打开模式、文件权限模式。

    Open方法只需要一个参数、文件名,默认以只读模式开启。

    Create方法用于创建一个文件、默认可读可写不可执行,已存在的文件会被截断并重新创建。

    Read/Write系列方法

    Read/Write方法用于文件读写。

    实例

    使用OpenFile方法打开文件,并且使用Read方法读取,WriteString写入。

    	file, _ := os.OpenFile("Fps.txt", os.O_APPEND|os.O_RDONLY, 0666)
    
    	 defer file.Close()//习惯性的关闭
    
    	bytes := make([]byte, 1024)
    
    	n, _ := file.Read(bytes)
    	
    	file.WriteString("write it!!!")
    
    	fmt.Println(string(bytes[0:n]))
    

    标准输出也是可以的

    os.Stdout.WriteString("hello")
    

    二、fmt包

    fmt包实现了类似C语言printf和scanf的格式化I/O。格式化动作('verb')源自C语言但更简单。

    之前已经描述过,主要的方法和功能就是printf和scanf。

    标准输入输出

    	fmt.Println()//输出任意类型数据,并换行
    	fmt.Print()  //输出任意类型数据,不换行
    	fmt.Printf()//格式化输出数据,不换行
    
    	fmt.Scan()//扫描,必须所有参数都被填充后换行才结束扫描
    	fmt.Scanln()//扫描,但是遇到换行就结束扫描
    	fmt.Scanf()//格式化扫描,换行就结束
    
    

    File输入输出

    这里指的File其实是Writer,只是File实现了Writer,暂且这样表示。

    io.Writer
    
        fmt.Fprintln()//输出任意类型数据到File中,并换行
    	fmt.Fprint()  //输出任意类型数据File中,不换行
    	fmt.Fprintf()//格式化输出任意类型数据到File中,不换行
    
    	fmt.Fscanln()//从File中读取数据进入参数中
    
    	file, _ := os.OpenFile("Fps.txt", os.O_CREATE|os.O_RDWR, 0666)
    
    	defer  file.Close()//习惯性的关闭
    
    	fmt.Fprintln(file,"hello Fprintln!!!")//将数据输入到file中
    

    字符串输入输出

    S系列和字符串相关,感兴趣可以自行研究。

    fmt.Sprintln()
    

    三、io/ioutil包

    io包下主要有两个接口,这两个接口被很多type实现,如FIle。

    除此之外,还有一系列接口。

    type Reader

    type Reader interface {
        Read(p []byte) (n int, err error)
    }
    

    Reader接口用于包装基本的读取方法。

    type Writer

    type Writer interface {
        Write(p []byte) (n int, err error)
    }
    

    Writer接口用于包装基本的写入方法。

    以及一个Copy函数。

    func Copy

    func Copy(dst Writer, src Reader) (written int64, err error)
    

    将src的数据拷贝到dst,直到在src上到达EOF或发生错误。返回拷贝的字节数和遇到的第一个错误。

        hello, _ := os.OpenFile("hello.txt",os.O_RDWR,0666)
    	hi ,_:= os.OpenFile("hi.txt",os.O_RDWR,0666)
    
    	defer hello.Close()
    	defer hi.Close()
    
    
    	io.Copy(hi,hello)
    	io.Copy(os.Stdout,hello)
    

    ioutil直接提供了读取文件的函数,如下。

    func ReadFile

    func ReadFile(filename string) ([]byte, error)
    

    ReadFile 从filename指定的文件中读取数据并返回文件的内容。成功的调用返回的err为nil而非EOF。因为本函数定义为读取整个文件,它不会将读取返回的EOF视为应报告的错误。

    	bytes, _ := ioutil.ReadFile("hello.txt")
    
    	fmt.Println(string(bytes))
    

    func WriteFile

    func WriteFile(filename string, data []byte, perm os.FileMode) error
    

    函数向filename指定的文件中写入数据。如果文件不存在将按给出的权限创建文件,否则在写入数据之前清空文件。

    四、bufio包

    bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。

    包下有两个结构体,名字和io包下的接口一样.

    type Reader

    type Reader struct {
        // 内含隐藏或非导出字段
    }
    

    type Writer

    type Writer struct {
        // 内含隐藏或非导出字段
    }
    

    通过以下两个函数来获取相应的缓存io对象。

    func NewReader

    func NewReader(rd io.Reader) *Reader
    

    NewReader创建一个具有默认大小缓冲、从r读取的*Reader。

    func NewWriter

    func NewWriter(w io.Writer) *Writer
    

    NewWriter创建一个具有默认大小缓冲、写入w的*Writer。

    其他用法和io用法类似,如下:

        file, _ := os.OpenFile("hello.txt", os.O_RDWR, os.ModeAppend)
    	reader := bufio.NewReader(file)
    
    	bytes := make([]byte, 100)
    
    	n, _ := reader.Read(bytes)
    	fmt.Println(string(bytes[0:n]))
    

    还有一些扩展的方法。

  • 相关阅读:
    Guava教程
    Spring Aop基于注解的实现
    简单易懂设计模式——策略模式
    Hibernate入门总结
    mybatis入门详解
    Mybatis【入门总结】
    手把手教你做一个缓存工具
    超简洁!利用easyExcel导出,读入Excel
    飞越面试官(四)--类加载过程
    飞越面试官(三)--JVM
  • 原文地址:https://www.cnblogs.com/cgl-dong/p/14035018.html
Copyright © 2011-2022 走看看