15_设备文件的使用.go
package main
import (
"fmt"
"os"
)
func main() {
//os.Stdout.Close() //关闭后,无法输出
//fmt.Println("are u ok?") //往标准输出设备(屏幕)写内容
//标准设备文件(os.Stdout),默认已经打开,用户可以直接使用
//os.Stdout
os.Stdout.WriteString("are u ok?\n")
//os.Stdin.Close() //关闭后,无法输入
var a int
fmt.Println("请输入a: ")
fmt.Scan(&a) //从标准输入设备中读取内容,放在a中
fmt.Println("a = ", a)
}
16_文件的读写.go
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func WriteFile(path string) {
//打开文件,新建文件
f, err := os.Create(path)
if err != nil {
fmt.Println("err = ", err)
return
}
//使用完毕,需要关闭文件
defer f.Close()
var buf string
for i := 0; i < 10; i++ {
//"i = 1\n", 这个字符串存储在buf中
buf = fmt.Sprintf("i = %d\n", i)
//fmt.Println("buf = ", buf)
n, err := f.WriteString(buf)
if err != nil {
fmt.Println("err = ", err)
}
fmt.Println("n = ", n)
}
}
func ReadFile(path string) {
//打开文件
f, err := os.Open(path)
if err != nil {
fmt.Println("err = ", err)
return
}
//关闭文件
defer f.Close()
buf := make([]byte, 1024*2) //2k大小
//n代表从文件读取内容的长度
n, err1 := f.Read(buf)
if err1 != nil && err1 != io.EOF { //文件出错,同时没有到结尾
fmt.Println("err1 = ", err1)
return
}
fmt.Println("buf = ", string(buf[:n]))
}
//每次读取一行
func ReadFileLine(path string) {
//打开文件
f, err := os.Open(path)
if err != nil {
fmt.Println("err = ", err)
return
}
//关闭文件
defer f.Close()
//新建一个缓冲区,把内容先放在缓冲区
r := bufio.NewReader(f)
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))
}
}
func main() {
path := "./demo.txt"
//WriteFile(path)
//ReadFile(path)
ReadFileLine(path)
}
17_拷贝文件.go
package main
import (
"fmt"
"io"
"os"
)
func main() {
list := os.Args //获取命令行参数
if len(list) != 3 {
fmt.Println("usage: xxx srcFile dstFile")
return
}
srcFileName := list[1]
dstFileName := list[2]
if srcFileName == dstFileName {
fmt.Println("源文件和目的文件名字不能相同")
return
}
//只读方式打开源文件
sF, err1 := os.Open(srcFileName)
if err1 != nil {
fmt.Println("err1 = ", err1)
return
}
//新建目的文件
dF, err2 := os.Create(dstFileName)
if err2 != nil {
fmt.Println("err2 = ", err2)
return
}
//操作完毕,需要关闭文件
defer sF.Close()
defer dF.Close()
//核心处理,从源文件读取内容,往目的文件写,读多少写多少
buf := make([]byte, 4*1024) //4k大小临时缓冲区
for {
n, err := sF.Read(buf) //从源文件读取内容
if err != nil {
fmt.Println("err = ", err)
if err == io.EOF { //文件读取完毕
break
}
}
//往目的文件写,读多少写多少
dF.Write(buf[:n])
}
}
课堂笔记
设备文件:
屏幕(标准输出设备) fmt.Println() 往标准输出设备写内容
键盘(标准输入设备) fmt.Scan() 从标准输入设备读取内容
磁盘文件,放在存储设备上的文件
1) 文本文件 以记事本打开,能看到内容(不是乱码)
2) 二进制文件 以记事本打开,能看到内容(是乱码)
为什么需要文件?内存掉电丢失,程序结束,内存中的内容消失
文件放磁盘,程序结束,文件还是存在