写在前面
在前面的文章当中,我们学会了如何去搭建Golang开发环境、学习了Golang当中常见的数据结构、学习了基本流程控制语句、学习了函数和结构体等内容,接下来我们将开始学习Golang当中的文件读写。
读取用户在控制台的输入
fmtScan
请看下面的例子:
package main
import "fmt"
func main() {
var firstname,lastname string
fmt.Println("请输入您的姓名:")
_, _ = fmt.Scanln(&firstname, &lastname)
fmt.Printf("你好!%s · %s\n", lastname, firstname)
}
输出:
请输入您的姓名:
韩 立
你好!立 · 韩
ScanlnScanfScanfSscanSscanScanf
bufio
请看下面的例子:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
fmt.Println("请输入一段文字")
inputReader := bufio.NewReader(os.Stdin)
s,err := inputReader.ReadString('\n')
if err == nil {
fmt.Println("你输入的是:")
fmt.Println(s)
}
}
输出:
请输入一段文字
去年今日此门中 人面桃花相映红。人面不知何处在 桃花依旧笑春风。
你输入的是:
去年今日此门中 人面桃花相映红。人面不知何处在 桃花依旧笑春风。
文件读写
文件读操作
os.File
按行读取
请看下面的例子:
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
inputFile, err := os.Open("G:\\06_golangProject\\golang\\doc\\筑基部分\\10_golang中的读写数据.md")
defer inputFile.Close()
if err!=nil {
fmt.Println(err)
}
input :=bufio.NewReader(inputFile)
for{
readString, err := input.ReadString('\n')
fmt.Println(readString)
if err==io.EOF {
fmt.Println(err)
return
}
}
}
os.Open
带缓冲的文件读取
很不幸的是,在很多情况下,文件的内容不是按行划分的,甚至有时候文件是一个二进制文件。这时,我们应当如何去读取它呢?
请看下面的这个例子:
package main
import (
"fmt"
"io"
"os"
)
func main() {
buf := make([]byte,1024)
inputFile, err := os.Open("G:\\06_golangProject\\golang\\doc\\筑基部分\\10_golang中的读写数据.md")
defer inputFile.Close()
if err!=nil {
fmt.Println(err)
}
for {
_, err := inputFile.Read(buf)
if err==io.EOF {
return
}
fmt.Println(string(buf))
}
}
[]byte
文件写操作
简单地介绍了Golang中的文件读操作,再讲一下文件的写操作,请看下面的例子:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("古丹丹方.txt", os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println("打开文件出错")
return
}
defer file.Close()
// 创建一个缓冲区
writer := bufio.NewWriter(file)
s := "Hello World\n"
for i := 0; i < 10; i++ {
// 写入缓冲区
_, _ = writer.WriteString(s)
}
// 将缓冲区的数据写入文件
_ = writer.Flush()
}
os.OpenFile(name string, flag int, perm FileMode) (*File, error)
|
os.O_RDONLYos.O_WRONLYos.O_CREATEos.O_TRUNC
OpenFile
文件拷贝
不知还有道友记得没,韩立在筑基期的洞府里用两株草药换了他雷师伯的丹方,他雷师伯当然不会直接将古方给他,而是将丹方拷贝了一份到玉简给了韩立。
source.txttarget.txt
package main
import (
"fmt"
"io"
"os"
)
func main() {
copyFile("古丹丹方.txt","给韩立的玉简.txt")
fmt.Println("拷贝完成!")
}
func copyFile(source, target string) {
openFile, err := os.Open(source)
if err!=nil {
fmt.Println("打开源文件出错")
return
}
defer openFile.Close()
createFile, err := os.Create(target)
if err!=nil {
fmt.Println("创建目标文件出错")
return
}
defer createFile.Close()
written, err := io.Copy(createFile, openFile)
if err != nil {
fmt.Println(err)
}
fmt.Println(written)
}
io.Copy
写在最后
以上就是Golang关于文件读写的上半部分内容,本文当中涉及到的例子可以点击此处下载。如果我的学习笔记能够给你带来帮助,还请多多点赞鼓励。文章如有错漏之处还请各位小伙伴帮忙斧正。
在下一篇文章当中我们将一起来学习Golang读取命令行参数和Golang中的数据网络传输等内容。