一、标准设备
1. 标准输出设备 屏幕
往标准输出设备写内容
fmt.Println()
2. 标准输入设备 键盘
从标准输入设备读取内容
fmt.Scan()
3.实例演示
import (
"os"
"fmt"
)
//标准设备 os.Stdout 默认为打开状态
fmt.Println("sss")
var a int
fmt.Println("请输入a:")
fmt.Scan(&a)
fmt.Println(a)
//往标准设备里写内容
s.Stdout.WriteString("0000")
//关闭标准设备
os.Stdout.Close()
//运行结果
sss
请输入a:
7
7
0000
//如果先关闭标准设备
//运行结果为空
二、文件打开与关闭
- 新建一个文件,形参name为文件名称,返回值有两个,*file 和 错误
如果文件本来存在,则会先清空原来内容然后再打开
func Create(name string) (*File, error)
- fmt.Sprintf 将传入内容组合为字符串,返回值为字符串
func Sprintf(format string, a ...interface{}) string
- 关闭文件
func (f *File) Close() error
//打开并新建文件
file, err := os.Create("./yuan.go")
if err != nil {
fmt.Println("err = ", err)
return
}
//使用完毕,关闭文件
defer file.Close()
//往文件中写内容
var buf string
for i := 0; i < 10; i++ {
//"i = i\n",这个字符串储存在buf中
buf = fmt.Sprintf("i = %d\n", i)
n, err := file.WriteString(buf)
if err != nil {
fmt.Println("err = ", err)
}
fmt.Println(n)
}
//运行结果
//新建了一个文件
yuan.go
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
三、文件读取
直接读取内容
- 打开一个文件,形参name为文件名称,返回值有两个,*file 和 错误
func Open(name string) (*File, error)
- 用 *file.Read 来调用该方法,形参为切片类型,返回值n表示从文件读取内容的长度,err为错误
func (f *File) Read(b []byte) (n int, err error)
//打开文件
file,err := os.Open("./yuan.go")
if err != nil {
fmt.Println("err = ",err)
return
}
//关闭文件
defer file.Close()
//读取文件内容
buf := make([]byte,1024*2) //2k大小
//n表示从文件读取内容的长度,buf为切片类型
n,err1 := file.Read(buf)
//文件出错同时没有到结尾
if err1 != nil && err != io.EOF{
fmt.Println("err = ",err)
return
}
//buf为切片,要转化为字符串string()
fmt.Printf("buf =%s ",string(buf[:n]))
每次读取一行内容
- NewReader创建一个具有默认大小缓冲、从r读取的*Reader。
func NewReader(rd io.Reader) *Reader
- ReadBytes读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的切片。如果ReadBytes方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadBytes方法返回的切片不以delim结尾时,会返回一个非nil的错误。
func (b *Reader) ReadBytes(delim byte) ([]byte, error)
//打开文件
file,err := os.Open("./yuan.go")
if err != nil {
fmt.Println("err = ",err)
return
}
//关闭文件
defer file.Close()
//新建一个缓冲区,把内容先放在缓冲区
r := bufio.NewReader(file)
//重复循环
for {
//遇到'\n'结束读取,但是'\n'也能读进去
buf,err := r.ReadBytes('\n') //此处要用单引号
if err != nil{
if err == io.EOF{
//文件已经结束,结束循环,结束读取
break
}
fmt.Println("err = ",err)
}
fmt.Printf("buf = ##%s##\n",string(buf))
}