15_設(shè)備文件的使用.go
package main
import (
"fmt"
"os"
)
func main() {
//os.Stdout.Close() //關(guān)閉后飘诗,無法輸出
//fmt.Println("are u ok?") //往標準輸出設(shè)備(屏幕)寫內(nèi)容
//標準設(shè)備文件(os.Stdout),默認已經(jīng)打開衰琐,用戶可以直接使用
//os.Stdout
os.Stdout.WriteString("are u ok?\n")
//os.Stdin.Close() //關(guān)閉后宏娄,無法輸入
var a int
fmt.Println("請輸入a: ")
fmt.Scan(&a) //從標準輸入設(shè)備中讀取內(nèi)容毙石,放在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
}
//使用完畢颓遏,需要關(guān)閉文件
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
}
//關(guān)閉文件
defer f.Close()
buf := make([]byte, 1024*2) //2k大小
//n代表從文件讀取內(nèi)容的長度
n, err1 := f.Read(buf)
if err1 != nil && err1 != io.EOF { //文件出錯徐矩,同時沒有到結(jié)尾
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
}
//關(guān)閉文件
defer f.Close()
//新建一個緩沖區(qū),把內(nèi)容先放在緩沖區(qū)
r := bufio.NewReader(f)
for {
//遇到'\n'結(jié)束讀取, 但是'\n'也讀取進入
buf, err := r.ReadBytes('\n')
if err != nil {
if err == io.EOF { //文件已經(jīng)結(jié)束
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 //獲取命令行參數(shù)
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
}
//操作完畢叁幢,需要關(guān)閉文件
defer sF.Close()
defer dF.Close()
//核心處理滤灯,從源文件讀取內(nèi)容,往目的文件寫遥皂,讀多少寫多少
buf := make([]byte, 4*1024) //4k大小臨時緩沖區(qū)
for {
n, err := sF.Read(buf) //從源文件讀取內(nèi)容
if err != nil {
fmt.Println("err = ", err)
if err == io.EOF { //文件讀取完畢
break
}
}
//往目的文件寫力喷,讀多少寫多少
dF.Write(buf[:n])
}
}
課堂筆記
設(shè)備文件:
屏幕(標準輸出設(shè)備) fmt.Println() 往標準輸出設(shè)備寫內(nèi)容
鍵盤(標準輸入設(shè)備) fmt.Scan() 從標準輸入設(shè)備讀取內(nèi)容
磁盤文件,放在存儲設(shè)備上的文件
1) 文本文件 以記事本打開演训,能看到內(nèi)容(不是亂碼)
2) 二進制文件 以記事本打開弟孟,能看到內(nèi)容(是亂碼)
為什么需要文件?內(nèi)存掉電丟失样悟,程序結(jié)束拂募,內(nèi)存中的內(nèi)容消失
文件放磁盤,程序結(jié)束窟她,文件還是存在