可以从文件读写,也可以从标准输入流读,写到控制台
import ( "fmt" "bufio" "os" )
func main() { var s string reader := bufio.NewReader(os.Stdin) fmt.Printf("输入>> ") s,_ = reader.ReadString('\n') fmt.Println(s) }
// io包,按字节数读
func main() {
// 只读方式打开当前目录下的main.go文件.返回*File,err
file, _ := os.Open("./main.go") // 打开失败err!=nil
// 关闭文件
defer file.Close()
//var tmp = make([]byte, 128)
for{
var tmp [128]byte
n, err := file.Read(tmp[:]) // n为读到的字节数n=128,读取失败err!=nil,每次读128byte
// fmt.Println(string(tmp[:n])) // 读到的内容在tmp切片中
fmt.Println(n) // 每次循环读到的字节数
if err == io.EOF{
return
}
}
}
//bufio按行读
import (
"bufio"
"fmt"
"io"
"os"
)// bufio按行读取示例
func main() {
file, _ := os.Open("./main.go") // _为err
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n') // 注意line是字符, err != nil读取错误
fmt.Print(line)
if err == io.EOF { // 读完了,再继续读,会出错err==io.EOF
break
}
}
}
// ioutil.ReadFile读取整个文件
package main
import (
"fmt"
"io/ioutil"
)
func main() {
content, err := ioutil.ReadFile("./main.go")
fmt.Println(string(content))
}
写操作
os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入相关功能。
func OpenFile(name string, flag int, perm FileMode) (*File, error) { // name:文件名,flag:打开文件的模式,perm:linux上的文件权限(755等)
...
}
flag:模式有以下几种:
os.O_WRONLY 只写
os.O_CREATE 创建文件
os.O_RDONLY 只读
os.O_RDWR 读写
os.O_TRUNC 清空
os.O_APPEND 追加
//Write和WriteString
func main() {
file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) //用逻辑或操作"|"实现不同的组合
defer file.Close()
str := "hello"
file.Write([]byte(str)) //写入字节切片数据
file.WriteString("hello boy") //直接写入字符串数据
}
//bufio.NewWriter
func main() {
file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
defer file.Close()
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString("hello boy\n") //将数据先写入缓存
}
writer.Flush() //将缓存中的内容写入文件
}
//ioutil.WriteFile
import (
"io/ioutil"
)
func main() {
str := "hello"
err := ioutil.WriteFile("./xx.txt", []byte(str), 0666)
}