文件操作 打开和关闭文件 os.Open()函数打开一个文件 返回一个*File和一个err 对得到的文件实例调用close()方法关闭文件 读取文件 file.Read() bufio读取文件 ioutil读取整个文件 package mainimpor
文件操作
打开和关闭文件
os.Open()函数打开一个文件
返回一个*File和一个err
对得到的文件实例调用close()方法关闭文件
读取文件
file.Read()
bufio读取文件
ioutil读取整个文件
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)
// 打开文件
func readFormFile1() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 读文件
// var tmp = make([]byte, 128) // 指定读的长度
var tmp [128]byte
for {
n, err := fileObj.Read(tmp[:])
if err == io.EOF {
fmt.Println("读完了")
return
}
if err != nil {
fmt.Printf("read from file failed, err:%v\n", err)
return
}
fmt.Printf("读了%d个字节\n", n)
fmt.Println(string(tmp[:n]))
if n < 128 {
return
}
}
}
// 利用bufio这个包读取文件
func readFormFilebyBufio() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 创建一个用来从文件中读内容的对象
reader := bufio.NewReader(fileObj)
for {
line, err := reader.ReadString('\n') //注意是字符
if err == io.EOF {
if len(line) != 0 {
fmt.Println(line)
}
fmt.Println("文件读完了")
break
}
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Print(line)
}
}
// ioutil读取整个文件
func readFormFileByIoutil() {
content, err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Println(string(content))
}
func main() {
// readFormFile1()
// readFormFilebyBufio()
readFormFileByIoutil()
}
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)
// 打开文件
func readFormFile1() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 读文件
// var tmp = make([]byte, 128) // 指定读的长度
var tmp [128]byte
for {
n, err := fileObj.Read(tmp[:])
if err == io.EOF {
fmt.Println("读完了")
return
}
if err != nil {
fmt.Printf("read from file failed, err:%v\n", err)
return
}
fmt.Printf("读了%d个字节\n", n)
fmt.Println(string(tmp[:n]))
if n < 128 {
return
}
}
}
// 利用bufio这个包读取文件
func readFormFilebyBufio() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 创建一个用来从文件中读内容的对象
reader := bufio.NewReader(fileObj)
for {
line, err := reader.ReadString('\n') //注意是字符
if err == io.EOF {
if len(line) != 0 {
fmt.Println(line)
}
fmt.Println("文件读完了")
break
}
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Print(line)
}
}
// ioutil读取整个文件
func readFormFileByIoutil() {
content, err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Println(string(content))
}
func main() {
// readFormFile1()
// readFormFilebyBufio()
readFormFileByIoutil()
}
文件写入操作
Write和WriteString
bufio.NewWriter
ioutil.WriteFile
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
)
// 打开文件写内容
func writeDemo1() {
fileObj, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
defer fileObj.Close()
// write
str := "吹尽狂沙始到金\n"
fileObj.Write([]byte(str)) //写入字节切片数据
fileObj.WriteString("学而不思则罔") //直接写入字符串数据
}
// bufio.NewWriter
func writeDemo2() {
fileObj, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
defer fileObj.Close()
// 创建一个写的对象
writer := bufio.NewWriter(fileObj)
for i := 0; i < 10; i++ {
writer.WriteString("天降大任于斯人也\n") //将数据先写入缓存
}
writer.Flush() //将缓存中的内容写入文件
}
// ioutil.WriteFile
func writeDemo3() {
str := "圣人以治天下为事者也,必知乱之所自起,焉能治之;不知乱之所自起,则不能治。"
err := ioutil.WriteFile("./xx.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file failed, err:", err)
return
}
}
func main() {
// writeDemo1()
// writeDemo2()
writeDemo3()
}
二进制实用途
package main
import "fmt"
// 二进制实用途
const (
eat int = 4
sleep int = 2
da int = 1
)
// 111
// 左边的1表示吃饭 100
// 中间的1表示睡觉 010
// 右边的1表示打豆豆 001
func f(arg int) {
fmt.Printf("%b\n", arg)
}
func main() {
f(eat | da) // 101
f(eat | sleep | da) // 111
}
获取用户输入时如果有空格的处理
package main
import (
"bufio"
"fmt"
"os"
)
// 获取用户输入时如果有空格
func useScan() {
var s string
fmt.Print("请输入内容:")
fmt.Scanln(&s)
fmt.Printf("您输入的内容是:%s\n", s)
}
func useBufio() {
var s string
reader := bufio.NewReader(os.Stdin) // NewReader的参数就是接口类型
fmt.Print("请输入内容:")
s, _ = reader.ReadString('\n')
fmt.Printf("您输入的内容是:%s\n", s)
}
func main() {
// useScan()
useBufio()
}