文件操作
一、普通方式
1、使用普通方式读取
package main
import (
"fmt"
"io"
"log"
"os"
)
// 读取文件操作
// 读取文件使用的是os包
func ReadFileInfo(){
// func os.Open(name string) (*os.File, error)
// 打开文件
file,err := os.Open(`E:\projects\GoProject\src\MyGo\test\main.go`)
// 关闭文件
if err != nil{
log.Fatalln("打开文件失败,错误信息:",err.Error())
return
}
defer file.Close()
// 读取文件
//func (*os.File).Read(b []byte) (n int, err error)
var b [128]byte
for{
n,err:= file.Read(b[:])
if err != nil{
if err == io.EOF{
break
}
log.Fatalln("读取文件失败: ",err.Error())
return
}
fmt.Print(string(b[:n]))
}
}
func main(){
ReadFileInfo()
}
2、使用普通方式写入
package main
import (
"log"
"os")
func FileWrite() {
//func os.OpenFile(name string, flag int, perm os.FileMode) (*os.File, error)
f, err := os.OpenFile(`E:\projects\GoProject\src\MyGo\test2\log.txt`,os.O_CREATE|os.O_WRONLY,0777)
if err != nil{
log.Fatalln("打开文件失败: ",err.Error())
}
defer f.Close()
//func (*os.File).WriteString(s string) (n int, err error)
_,err = f.WriteString("Hello Go!!!")
if err != nil{
log.Fatalln("写入失败: ", err.Error())
}
}
func main(){
FileWrite()
}
二、使用buifo
1、使用bufio读取
bufio只是在原先的基础上做了一层封装,类似Java的io操作
package main
import (
"bufio"
"fmt"
"io"
"log"
"os"
)
// 读取文件操作
// 读取文件使用的是os包
func ReadFileInfoBuf(){
// func os.Open(name string) (*os.File, error)
// 打开文件
file,err := os.Open(`E:\projects\GoProject\src\MyGo\test1\main.go`)
// 关闭文件
if err != nil{
log.Fatalln("打开文件失败,错误信息:",err.Error())
return
}
defer file.Close()
//func bufio.NewReader(rd io.Reader) *bufio.Reader
// os.File实现了io.Reader接口里面的方法。
reader := bufio.NewReader(file)
// 循环读取
var FLAG bool = false
for{
//func (*bufio.Reader).ReadString(delim byte) (string, error)
s, err := reader.ReadString('\n')
if err != nil{
if err == io.EOF{
//fmt.Println("文件读取完毕")
FLAG = true
}else{
log.Fatalln("文件读取失败: ",err.Error())
return
}
}
fmt.Print(s)
if FLAG{
break
}
}
}
func main(){
ReadFileInfoBuf()
}
2、写入文件
package main
import (
"bufio"
"os"
"log"
)
func WriteFileByBufio() {
f,err := os.OpenFile(`E:\projects\GoProject\src\MyGo\test3\log.txt`,os.O_CREATE|os.O_WRONLY,0777)
if err != nil{
log.Fatalln("打开文件失败: ",err.Error())
}
defer f.Close()
//func bufio.NewWriter(w io.Writer) *bufio.Writer
f1 := bufio.NewWriter(f)
_,err = f1.WriteString("你好,go")
if err != nil{
log.Fatalln("写入失败",err.Error())
}
// 写完一定要刷新缓存
f1.Flush()
}
func main(){
WriteFileByBufio()
}
三、使用ioutil
1、读取
package main
import (
"fmt"
"io/ioutil"
"log"
)
func ReadFileByioutil(){
//func ioutil.ReadFile(filename string) ([]byte, error)
b , err := ioutil.ReadFile(`E:\projects\GoProject\src\MyGo\test1\main.go`)
if err != nil{
log.Fatalln("读取错误: ",err.Error())
}
fmt.Print(string(b))
}
func main(){
//ReadFileInfoBuf()
ReadFileByioutil()
}
2、写入文件
package main
import (
"io/ioutil"
"log"
)
func WriteFile() {
//func ioutil.WriteFile(filename string, data []byte, perm os.FileMode) error
err := ioutil.WriteFile(`E:\projects\GoProject\src\MyGo\test4\log.txt`,[]byte("你好,go"),0777)
if err != nil{
log.Fatalln("写入失败: ",err.Error())
return
}
}
func main(){
WriteFile()
}
四、使用bufio读取命令行输入
package main
import (
"bufio"
"fmt"
"os"
)
func ReadConsole() {
fmt.Print("请输入数据: ")
reader := bufio.NewReader(os.Stdin)
s,err := reader.ReadString('\n')
if err != nil{
fmt.Println("读取错误")
}
fmt.Println("输入为: ", s)
}
func main(){
ReadConsole()
}
记录学习和生活的酸甜苦辣.....哈哈哈