终端读写
操作终端读写相关句柄常量
- os.Stdin :标准输入
- os.Stdout :标准输出
- os.Stderr :标准错误输出
带缓存区的读写
func main() {
fmt.Println("输入内容")
inputReader := bufio.NewReader(os.Stdin)
input, err := inputReader.ReadString('\n')
if err == nil {
fmt.Println(input)
}
}
文件读写
os.File封装所有文件相关的操作,之前的os.Stdin、os.Stdout、os.Stderr都是*os.File
- 打开文件操作:os.Open(name, string)(*File, error)
- 关闭文件操作:File.Close()
- 判断文件是否读完:io.EOF
func main() {
file, err := os.Open("C:/Users/orion/Desktop/test.txt")
if err != nil {
fmt.Printf("open file fail:%v", err)
return
}
defer file.Close()
inputReader := bufio.NewReader(file)
for {
read, err := inputReader.ReadString('\n')
if err == io.EOF {
return
}
fmt.Printf("this file read:%v", read)
}
}
小文件全部读取写入操作io/ioutil
func main() {
buf, err := ioutil.ReadFile("C:/Users/orion/Desktop/test.txt")
if err != nil {
fmt.Fprintf(os.Stderr, "file error:%s\n", err)
return
}
fmt.Printf("%s\n", string(buf))
err = ioutil.WriteFile("C:/Users/orion/Desktop/adx.txt", buf, 0x644)
if err != nil {
panic(err.Error())
}
}
读取压缩文件
func main() {
var r *bufio.Reader
fName := "C:/Users/orion/Desktop/测试.gz"
file, err := os.Open(fName)
if err != nil {
fmt.Fprint(os.Stderr, "%v:Can't open %s:error:%s\n", os.Args[0], fName, err)
os.Exit(1)
}
defer file.Close()
fz, err := gzip.NewReader(file)
if err != nil {
fmt.Fprint(os.Stderr, "open gzip fail,err:%v", err)
return
}
r = bufio.NewReader(fz)
for {
line, err := r.ReadString('\n')
if err != nil {
fmt.Printf("Done reading file")
os.Exit(1)
}
fmt.Println(line)
}
}
文件写入
os.OpenFile(“output.dat”, os.O_WRONLY|os.O_CREATE, 0664)
第二个参数:文件打开模式
- os.O_WRONLY:只写
- os.O_CREATE:创建文件
- os.O_RDONLY:只读
- os.O_RDWR:读写
- os.O_TRUNC :清空
第三个参数:八进制数字,权限控制,只有os.O_CREATE时起作用
- r——>004
- w——>002
- x——>001
func main() {
outFile, err := os.OpenFile("C:/Users/orion/Desktop/测试.txt", os.O_CREATE|os.O_WRONLY, 0064)
if err != nil {
fmt.Println("An error occurred with file creation", err)
return
}
defer outFile.Close()
outWrite := bufio.NewWriter(outFile)
outWrite.WriteString("hello word")
outWrite.Flush()
}
文件拷贝
func CopyFile(dstName, srcName string) (written int64, err error) {
src, err := os.Open(srcName)
if err != nil {
return
}
defer src.Close()
dst, err := os.OpenFile(dstName, os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return
}
defer dst.Close()
return io.Copy(dst, src)
}
func main() {
CopyFile("C:/Users/orion/Desktop/测试1.txt", "C:/Users/orion/Desktop/测试.txt")
}