Go语言fmt、os、io\ioutil、bufio包
作者:互联网
fmt、os、io\ioutil、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]))
还有一些扩展的方法。
标签:文件,ioutil,type,fmt,Writer,io,os 来源: https://www.cnblogs.com/cgl-dong/p/14035018.html