go介绍34——文件操作

设备文件的使用

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])
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值