Golang 文件目录处理

Golang 文件目录处理

文件读取

方法1

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

2、读取文件 file.Read()

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



//打开文件 返回一个指针
	file, err := os.Open("./11.go")
	defer file.Close()
	if err != nil {
		fmt.Println(err)
		return
	}
	//读取文件内容
	var s []byte
	var t = make([]byte, 128)
	for {
		n, err := file.Read(t)
		if err == io.EOF { //表示文件读取完毕
			break
		}
		if err != nil {
			return
		}
		s = append(s, t[:n]...)
	}

	fmt.Print(string(s))

方法2 bufio 读取文件

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

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

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

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



	//打开文件 返回一个指针
	file, err := os.Open("./11.go")
	defer file.Close()
	if err != nil {
		fmt.Println(err)
		return
	}
	//读取文件内容
	var s string
	reader := bufio.NewReader(file)
	for {
		str, err := reader.ReadString('\n') //表示一次读取一行
		if err == io.EOF {
			s += str
			break
		}
		if err != nil {
			return
		}
		s += str

	}

	fmt.Print(s)

方法3 ioutil 读取文件

ioutil 读取文件

打开关闭文件的方法它都封装好了只需要一句话就可以读取

ioutil.ReadFile("file")

byteStr, err := ioutil.ReadFile("./11.go")
	if err != nil {
		return
	}
	fmt.Println(string(byteStr))

文件写入

相关权限如下:

函数 描述
os.O_CREATE 创建
os.O_RDWR 读写
os.O_APPEND 追加
os.O_RDONLY 只读
os.O_WRONLY 只写
os.O_TRUNC 清空文件
os.O_SYNC 当进行一系列写操作时,每次都要等待上次的 I/O 操作完成再进行
os.O_EXCL 和 O_CREATE 配合使用,文件必须不存在,否则返回一个错误;

方法1

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

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

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


file, err := os.OpenFile("./a.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	defer file.Close()
	if err != nil {
		return
	}
	//for循环写入多行
	// for i := 0; i < 10; i++ {
	// 	file.WriteString("xxxxx" + strconv.Itoa(i) + "\r\n")

	// }
	//写入单行
	var str = "直接写入"
	file.Write([]byte(str))

方法2 bufio 写入文件

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

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

3、将数据先写入缓存  writer.WriteString("你好golang\r\n")

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

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


file, err := os.OpenFile("./a.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
	defer file.Close()

	if err != nil {
		fmt.Println("open file failed, err:", err)
		return
	}
	writer := bufio.NewWriter(file)

	writer.WriteString("你好golang") //将数据先写入缓存

	// for i := 0; i < 10; i++ {
	// 	writer.WriteString("直接写入的字符串数据" + strconv.Itoa(i) + "\r\n")
	// }

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

方法3 ioutil 写入文件

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



str := "hello golang"
	err := ioutil.WriteFile("./a.txt", []byte(str), 0666)
	if err != nil {
		fmt.Println("write file failed, err:", err)
		return
	}

文件重命名

os.Rename(oldname,newname)

文件复制

//自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(srcFileName string, dstFileName string) (err error) {
	sFile, err1 := os.Open(srcFileName)
	defer sFile.Close() //必须关闭
	dFile, err2 := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
	defer dFile.Close() //必须关闭
	if err1 != nil {
		return err1
	}
	if err2 != nil {
		return err2
	}
	var tempSlice = make([]byte, 1280)
	for {
		//读取数据
		n1, err := sFile.Read(tempSlice)
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}
		// 写入数据
		if _, err := dFile.Write(tempSlice[:n1]); err != nil {
			return err
		}
	}
	return nil
}
err := CopyFile(srcFile, dstFile)

目录操作

创建目录
os.Mkdir('aaa',0755)
创建多层目录
os.MkdirAll('a/b/c',0755)
删除文件和目录
os.Remove("a.txt")
os.RemoveAll("aaa")

Golang 文件目录处理
http://www.jcwit.com/article/502/
作者
Carlos
发布于
2024年3月22日
许可协议