Golang语言学习笔记(十四)

Golang文件 目录操作

模式 含义
os.O_WRONLY 只写
os.O_CREATE 创建文件
os.O_RDONLY 只读
os.O_RDWR 读写
os.O_TRUNC 清空
os.O_APPEND 追加

perm:文件权限,一个八进制数,r(读)04,w(写)02,x(执行)01.

package main

import (
	"fmt"
	"io"
	"io/ioutil"
	"os"
)

//编写一个函数,接收两个文件路径  srcFileName, dstFileName

func copy(srcFileName, dstFileName string) error {
	byteStr, err1 := ioutil.ReadFile(srcFileName)
	if err1 != nil {
		return err1
	}

	err2 := ioutil.WriteFile(dstFileName, byteStr, 0666)
	if err2 != nil {
		return err2
	}

	return nil
}

func copyFile(srcFileName, dstFileName string) error {

	srcfile, err1 := os.Open(srcFileName)
	dstfile, err2 := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
	if err1 != nil {
		return err1
	}
	if err2 != nil {
		return err2
	}

	var tempSlice = make([]byte, 128)
	for {
		n1, e1 := srcfile.Read(tempSlice)
		_, e2 := dstfile.Write(tempSlice[:n1])
		if e1 != io.EOF {
			break
		}
		if e1 != nil {
			return e1
		}
		if e2 != nil {
			return e2
		}
	}

	return nil
}

func main() {
	/*
		读取文件:

			一、读取文件(方法1)
				1.只读方式打开文件 file, err := os.Open()

				2.读取文件 file.Read()

				3.关闭文件流 defer file.Close()

			二、读取文件(方法2) bufio读取文件

				1.只读方式打开文件 file, err := os.Open()

				2.创建reader对象 reader := bufio.NewReader(file)

				3.ReadString读取文件 line, err := reader.ReadString('
')

				4.关闭文件流 defer file.Close()

			三、读取文件(方法3)ioutil 读取文件

				打开关闭文件的方法都风钻工好了,只需要一句话就可以读取
				ioutil.ReadFile("./main.go")

		写入文件:
			一、写入文件(方法1)
				1.打开文件 file, err := os.OpenFile("./test.txt",os.O_CREATE|os.O_RDWR,0666)

				2.写入文件
					file.Write([]byte(str)) //写入字节切片数据
					file.WriteString("直接写入的字符串数据")//直接写入字符串数据

				3.关闭文件流 file.Close()

			二、写入文件(方法2)bufio写入文件

				1.打开文件 file, err := os.OpenFile("./test.txt",os.O_CREATE|os.O_RDWR,0666)

				2.创建writer对象 writer := bufio.NewWriter(file)

				3.将数据先写入缓存 writer.WriteString("hello golang 
")

				4.将缓存中的内容写入文件  writer.Flush()

				5.关闭文件流 file.Close()

			三、写入文件(方法3)ioutil写入文件

				str := "hello golang"
				err := ioutil.WriteFile("./test.txt",[]byte(str),0666)

		文件重命名:

			err := os.Rename("C:/test1.txt", "D:/test1.txt")//只能同盘操作

		复制文件:

			一、方法1
				input, err := ioutil.ReadFile(srcFileName)

				err = iotil.WriteFile(dsFileName, input, 0644)

			二、方法2

				source, _ := os.Open(srcFileName)

				destination, _ := os.OpenFile(dsFileName, os.O_CREATE|os.O_WRONLY, 0666)

				n, err := source.Read(buf)

				destination.Write(buf[:n])
		创建目录:

			err := os.Mkdir("./abc",0666)

			err := os.MkdirAll("dir1/dir2/dir3",0666)//创建多级目录

		删除目录和文件:

			err := os.Remove("t.txt")

			err := os.RemoveAll("aaa")

	*/

	//读取文件
	//只读方式打开当前目录下的main.go文件
	// file, err := os.Open("./test.txt") //文件路径可以是相对路径也可以是绝对路径
	// defer file.Close()                 //必须关闭文件流

	// if err != nil {
	// 	fmt.Println(err)
	// 	return
	// }

	// //操作文件
	// fmt.Println(file) //&{0xc00007e780}文件地址
	// //file.Read()读取文件里面的内容
	// var strSlice []byte
	// var tempSlice = make([]byte, 128)
	// for {
	// 	n, err := file.Read(tempSlice)
	// 	if err == io.EOF { //表示读取完毕
	// 		fmt.Println("读取完毕")
	// 		break
	// 	}
	// 	if err != nil {
	// 		fmt.Println("读取文件失败")
	// 		return
	// 	}
	// 	// fmt.Printf("读取到了%v个字节
", n)
	// 	strSlice = append(strSlice, tempSlice[:n]...)
	// }

	// fmt.Println(string(strSlice))

	//bufio.NewReader(file)方法
	// var fileStr string
	// reader := bufio.NewReader(file)

	// for {
	// 	str, err := reader.ReadString('
') //表示一次读取一行
	// 	if err == io.EOF {
	// 		fileStr += str
	// 		break
	// 	}
	// 	if err != nil {
	// 		fmt.Println(err)
	// 		return
	// 	}
	// 	fileStr += str
	// }
	// fmt.Println(fileStr)

	//ioutil读取文件
	// byteStr, err := ioutil.ReadFile("./test.txt")
	// if err != nil {
	// 	fmt.Println(err)
	// 	return
	// }
	// fmt.Println(string(byteStr))

	//写入文件

	//打开文件
	// file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	// defer file.Close()

	// if err != nil {
	// 	fmt.Println(err)
	// 	return
	// }

	// //写入文件 file.WriteString()
	// // for i := 0; i < 10; i++ {
	// // 	file.WriteString("写入的字符串" + strconv.Itoa(i) + "
")
	// // }

	// //写入文件file.Write()
	// // var str = "直接写入的字符串"
	// // file.Write([]byte(str))

	//bufio

	// writer := bufio.NewWriter(file)

	// // writer.WriteString("hello golang")//将数据先写入缓存
	// for i := 0; i < 10; i++ {
	// 	writer.WriteString("writer写入的字符串" + strconv.Itoa(i) + "
")
	// }

	// writer.Flush() //将缓存中的内容写入文件

	//ioutil
	// str := "hello golang"
	// err := ioutil.WriteFile("./test.txt", []byte(str), 0666)

	// if err != nil {
	// 	fmt.Println("Write file failed, err: ", err)
	// 	return
	// }

	//复制文件

	//ioutil
	// byteStr, err1 := ioutil.ReadFile("./test.txt")
	// if err1 != nil {
	// 	fmt.Println(err1)
	// 	return
	// }

	// err2 := ioutil.WriteFile("C:/tmp/test.txt", byteStr, 0666)
	// if err2 != nil {
	// 	fmt.Println(err2)
	// 	return
	// }

	// fmt.Println("文件复制成功")
	//封装成一个复制文件的方法
	// srcFileName := "./test.txt"
	// dstFileName := "C:/tmp/golang.txt"

	// //ioutil
	// // err := copy(srcFileName, dstFileName)

	// //file.Read() file.Write()
	// err := copyFile(srcFileName, dstFileName)
	// if err != nil {
	// 	fmt.Println(err)
	// 	return
	// }
	// fmt.Println("文件复制成功")

	//创建文件
	// err := os.Mkdir("./abc", 0666)
	// err := os.MkdirAll("dir1/dir2/dir3", 0666) //创建多级目录
	// if err != nil {
	// 	fmt.Println(err)
	// }

	//删除文件

	//删除一个文件
	// err := os.Remove("test.txt")

	//删除一个目录
	// err := os.RemoveAll("abc")

	//一次删除多个目录
	// err := os.RemoveAll("dir1")

	// if err != nil {
	// 	fmt.Println(err)
	// 	return
	// }

	//重命名
	err := os.Rename("C:/tmp/golang.txt", "C:/tmp/test.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("重命名成功")

}

Golang语言学习笔记系列都学习自itying的大地老师,非常感谢!!!

原文地址:https://www.cnblogs.com/hanajiang/p/13826604.html