golang读、写、复制、创建目录、删除、重命名,文件方法总结

文章目录

一、只读文件

go 复制代码
 file, err := os.Open("./main.go")
  defer file.Close() //打开文件一定要关闭关闭文件
     if err != nil {
	 	fmt.Println("文件打开失败", err)
   }

     /*方案一 */	
	// 读取文件内容
	var typeSlice = make([]byte, 128) //创建byte切片 128字节
	var strSlice []byte
	for { //循环128 128方式的去读
		n, err := file.Read(typeSlice)
		if err == io.EOF { //文件读取完毕
			fmt.Println("文件读取完毕")
			break
		}
		if err != nil {
			fmt.Println("文件读取失败", err)
			return
		}
		fmt.Printf("读取了%d个字节\n", n)
		strSlice = append(strSlice, typeSlice[:n]...) //最后一次读取不一定是128字节
	}
	fmt.Println("读取的内容:", string(strSlice)) //string内容 必须是执行读取之后再打印


    /*方案二 bufio读取文件 */
	reader := bufio.NewReader(file)
	var fileStr string
	for {
		str, err := reader.ReadString('\n') //读取一行 一行一行的读取
		if err == io.EOF {                  //文件读取完毕
			fileStr += str
			fmt.Println("文件读取完毕")
			break
		}
		if err != nil {
			fmt.Println("文件读取失败", err)
			return
		}
		fmt.Println("读取的内容:", str)
		fileStr += str  //拼接字符串
	}
	fmt.Println("读取的文件内容:", fileStr)

   
	/*方案三 ioutil读取文件  适合文件不大*/
	byteStr, err := ioutil.ReadFile("./main.go")
	if err != nil {
		fmt.Println("文件读取失败", err)
		return
	}
	fmt.Println("读取的文件内容:", string(byteStr))

二、写入文件

go 复制代码
/*写文件 os.O_CREATE创建 | os.O_WRONLY只写 |  os.O_TRUNC清空文件 | os.O_APPEND追加*/
  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("hello world") // 写入字符串

   //方法二 写入文件
	file.Write([]byte("hello world"))

	// 方法三 写入文件
	writer := bufio.NewWriter(file)
	writer.WriteString("你好 golang") //将数据先写入缓存
	writer.Flush()                  //刷新缓冲区,将缓存的数据写入文件

	//方法四 写入文件 但是覆盖全部
	str := "hello golang"
	err := ioutil.WriteFile("./test.txt", []byte(str), 0666)
	if err != nil {
		fmt.Println("文件写入失败", err)
	    return
	}

三、复制文件

go 复制代码
// 方法一
	byteStr, err := ioutil.ReadFile("test.txt")
       if err != nil {
	      fmt.Println("文件读取失败", err)
	      return
	}
	err1 := ioutil.WriteFile("test2.txt", byteStr, 0666)
	if err1 != nil {
		fmt.Println("文件写入失败", err)
	return
	}
	fmt.Println("文件复制成功")

四、创建目录

go 复制代码
     err := os.Mkdir("./test3", 0666)
	 err := os.MkdirAll("./test3/test4", 0666) //创建多级目录
	    if err != nil {
	       fmt.Println("创建目录失败", err)
           return
	}
	fmt.Println("创建目录成功")

五、删除目录/文件

go 复制代码
   err := os.Mkdir("./test3", 0666)
	 err := os.RemoveAll("./test3/test4") //到哪一级删哪一级
	 if err != nil {
	   fmt.Println("删除目录失败", err)
	   return
	}
	fmt.Println("删除目录成功")

五、重命名文件

go 复制代码
   err := os.Rename("./test.txt", "./test1.txt")
	  if err != nil {
	    fmt.Println("重命名失败", err)
	    return
	  }
	 fmt.Println("重命名成功")
相关推荐
Yeats_Liao2 小时前
Go Web 编程快速入门 · 04 - 请求对象 Request:头、体与查询参数
前端·golang·iphone
驰羽5 小时前
[GO]gin框架:ShouldBindJSON与其他常见绑定方法
开发语言·golang·gin
猫梦www9 小时前
力扣21:合并两个有序链表
数据结构·算法·leetcode·链表·golang·力扣
std787914 小时前
Rust 与 Go – 比较以及每个如何满足您的需求
开发语言·golang·rust
007php00716 小时前
猿辅导Java面试真实经历与深度总结(二)
java·开发语言·python·计算机网络·面试·职场和发展·golang
Dobby_051 天前
【Go】C++ 转 Go 第(二)天:变量、常量、函数与init函数
vscode·golang·go
-睡到自然醒~1 天前
[go 面试] 并发与数据一致性:事务的保障
数据库·面试·golang
科比不来it1 天前
Go语言数据竞争Data Race 问题怎么检测?怎么解决?
开发语言·c++·golang
驰羽1 天前
[GO]Go语言包访问控制与导入机制
golang
像风一样自由20201 天前
Rust Tokio vs Go net/http:云原生与嵌入式生态选型指南
开发语言·golang·rust