Go语言学习(八)-os包

一、文件目录相关

  • 创建文件
  • 创建目录
  • 删除目录/文件
  • 获得工作目录
  • 重命名文件
  • 读文件
  • 写文件
package main

import (
	"fmt"
	"os" //os包
)
/*
golang os模块-文件相关
*/

//创建文件
func createFile(){
	f,err:=os.Create("a.txt")
	if err!=nil{
		fmt.Println("err:",err)
	}else{
		fmt.Println("file:",f.Name())
	}
}
//创建目录
func makeDir(){
	//方法一: 创建一个目录,在当前文件夹下
	err:=os.Mkdir("test",os.ModePerm) //os.ModePerm---保证有权限创建目录
	if err!=nil{
		fmt.Println("err",err)
	}
	//方法二:
	err2:=os.MkdirAll("test/b/c",os.ModePerm)
	if err2!=nil{
		fmt.Println("err2",err2)
	}
}
//删除目录/文件
func remove(){
	//删除一个文件
	err:=os.Remove("a.txt")
	if err!=nil{
		fmt.Println("err",err)
	}
	//删除所有文件--删除该目录
	err2:=os.RemoveAll("test")
	if err2!=nil{
		fmt.Println("err2",err2)
	}
}
//获得工作目录,修改工作目录
func getWd(){
	dir,_:=os.Getwd()
	fmt.Println("dir:",dir) //dir: d:\zxx\go_code\src\study
	//修改目录
	os.Chdir("d:/") //修改到D盘根目录
	dir,_=os.Getwd()
	fmt.Println("dir:",dir) //dir: d:\
	//获得临时目录
	s:=os.TempDir()
	fmt.Println("s:",s) //s: C:\Users\QYC\AppData\Local\Temp

}
//重命名文件
func rename(){
	err:=os.Rename("test.txt","test2.txt")
	if err!=nil{
		fmt.Println("err:",err)
	}
}
//读文件
func readFile(){
	b,_:=os.ReadFile("test2.txt") //b是个字节数组[]byte
	fmt.Printf("b:%v", string(b[:])) //b:hello world
}
//写文件
func writeFile(){
	os.WriteFile("test2.txt",[]byte("happy"),os.ModePerm)
	//会覆盖原来的内容。写的形式是字节数组的形式,即[]byte("happy")
}
func main() {
	// createFile() //file: a.txt 表示创建成功了
	// makeDir()
	// remove()
	// getWd()
	// rename()
	// readFile()
	writeFile()
}

二、文件目录读操作

  • 打开关闭文件
  • 读文件
package main

import (
	"fmt"
	"os" //os包
	"io"
)
/*
golang os模块-File文件读写操作
*/

//打开关闭文件
func openCloseFile(){
	//只能读
	f,err:=os.Open("test2.txt")
	if err!=nil{
		fmt.Println("err:",err)
	}else{
		fmt.Println("f.name:",f.Name()) //f.name: test2.txt
		f.Close()//文件用完之后要关掉
	}
	//可读可写
	f,err1:=os.OpenFile("test1.txt",os.O_RDWR|os.O_CREATE,755) //授予读写权限,如果没有找到该文件,就创建一个
	if err1!=nil{
		fmt.Println("err:",err)
	}else{
		fmt.Println("f.name:",f.Name()) //f.name: test1.txt
		f.Close()
	}
}

//读文件
func readOps(){
	f,_:=os.Open("test2.txt")
	//循环读取
	for{
		buf:=make([]byte,10) //设置缓冲区,一次读一个缓冲区里的内容。这里设置缓冲区大小为10
		n,err:=f.Read(buf) //n表示这次读到了几个byte
		if err == io.EOF{
			//如果读到文件为文件尾的话就跳出循环
			break
		}
		fmt.Println("n:",n)
		fmt.Println("buf",string(buf))
	}
	//从指定位置开始读
	buf1:=make([]byte,10)
	n,_:=f.ReadAt(buf1,3) //从索引为3的字符开始读
	fmt.Println("n:",n)
	fmt.Println("buf",string(buf1))
	//读目录
	de,_:=os.ReadDir("a")
	for _, v := range de {
		fmt.Println("v是不是目录:",v.IsDir())
		fmt.Println("v的名称:",v.Name())
	}
	f.Close()

}
func main() {
	openCloseFile()
	readOps()
}

三、File文件写操作

package main

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

/*
golang os模块-File文件写操作
*/

// 打开关闭文件
func write() {
	//覆盖原文件内容
	f, _ := os.OpenFile("test1.txt", os.O_RDWR, 0755)
	f.Write([]byte("hello world"))
	f.Close()
	//在文件原有内容后面追加
	f, _ = os.OpenFile("test1.txt", os.O_RDWR|os.O_APPEND, 0755)
	f.Write([]byte("and love the world and love QYC"))
	f.Close()

}

// 写一个字符串
func writeString() {
	file, _ := os.OpenFile("test1.txt", os.O_RDWR, 0755) //也可以追加
	file.WriteString("hello zxx!!")
	file.Close()
}

// 在某个索引位置写
func writeAt() {
	file, _ := os.OpenFile("test1.txt", os.O_RDWR, 0755) //不能用追加,用追加会出问题
	file.WriteAt([]byte("aaa"), 3)                       //从索引位置为3的位置开始写
	file.Close()
}
func main() {
	//write()
	//writeString()
	writeAt()
}

四、环境变量相关

package main

import (
	"fmt"
	"os"
)

/*
golang os模块-环境变量相关
*/

func main() {
	//获得所有环境变量
	environ := os.Environ()
	fmt.Printf("environ:%v\n", environ)
	//获得某个环境变量
	getenv := os.Getenv("GOPATH")
	fmt.Printf("getenv:%v\n", getenv)
	//常用环境变量
	env, b := os.LookupEnv("GOPATH")
	if b {
		println(env)
	}
	//设置环境变量
	os.Setenv("env1", "env1")
	//替换
	os.Setenv("NAME", "gopher")
	os.Setenv("BURROW", "/user/gopher")
	println(os.ExpandEnv("$NAME lives in ${BURROW}")) //gopher lives in /user/gopher

	/*
		环境变量的替换: NAME会被替换为gopher;BURROW会被替换为/user/gopher
	*/
    //os.Clearenv() //删除掉所有环境变量 慎用!!!!
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值