设备文件的使用
package main
import (
"fmt"
"os"
)
func main() {
//os.Stdout.Close() //关闭后 无法输出
fmt.Println("are you ok?")
//标准设备文件 默认已经打开,用户可以直接使用
os.Stdout.WriteString("are you ok?\n")
//os.Stdin.Close() //关闭后 无法输入
var a int
fmt.Println("请输入a:")
fmt.Scan(&a)
fmt.Println("a = ", a)
}
文件的写
package main
import (
"fmt"
"os"
)
func WriteFile(path string) {
//打开文件 新建文件
file, err := os.Create(path)
if err != nil {
fmt.Println("err = ", err)
return
}
//文件关闭
defer file.Close()
var buf string
for i := 0; i < 10; i++ {
buf = fmt.Sprintf("i = %d\n", i) //buf作为返回值 返回具体内容
num, err := file.WriteString(buf)
if err != nil {
fmt.Println("err = ", err)
return
}
fmt.Println("num = ", num)
}
}
func main() {
path := "D:/test.txt"
WriteFile(path)
}
文件的读
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func WriteFile(path string) {
//打开文件 新建文件
file, err := os.Create(path)
if err != nil {
fmt.Println("err = ", err)
return
}
//文件关闭
defer file.Close()
var buf string
for i := 0; i < 10; i++ {
buf = fmt.Sprintf("i = %d\n", i) //buf作为返回值 返回具体内容
num, err := file.WriteString(buf)
if err != nil {
fmt.Println("err = ", err)
return
}
fmt.Println("num = ", num)
}
}
//文件读
func ReadFile(path string) {
//打开文件 "Open"函数
file, err := os.Open(path)
if err != nil {
fmt.Println("err = ", err)
return
}
//关闭文件
defer file.Close()
//创建切片
buf := make([]byte, 1024*2)
//num为读取的字节数目
num, err1 := file.Read(buf)
if err1 != nil && err1 != io.EOF { //文件出错 没有到结尾
fmt.Println("err1 = ", err1)
return
}
//buf[:num]为指定读取的大小
fmt.Println("buf = ", string(buf[:num]))
}
//每次读取一行
func ReadFileLine(path string) {
//打开文件 "Open"函数
file, err := os.Open(path)
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))
}
}
func main() {
path := "D:/test.txt"
//WriteFile(path)
//ReadFile(path)
ReadFileLine(path)
}
拷贝文件
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
}
//只读方式打开源文件
srcFile, err1 := os.Open(srcFileName)
if err1 != nil {
fmt.Println("err1 = ", err1)
return
}
//新建目的文件
dstFile, err2 := os.Create(dstFileName)
if err2 != nil {
fmt.Println("err2 = ", err2)
return
}
defer srcFile.Close()
defer dstFile.Close()
//从源文件读物内容,往目的文件写,读多少写多少
buf := make([]byte, 4*1024)
for {
//往buf里面读
num, err3 := srcFile.Read(buf)
if err3 != nil {
if err3 == io.EOF {
fmt.Println("文件拷贝完成")
break
}
}
//往目的文件写数据
dstFile.Write(buf[:num])
}
}