一、文件目录相关
- 创建文件
- 创建目录
- 删除目录/文件
- 获得工作目录
- 重命名文件
- 读文件
- 写文件
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() //删除掉所有环境变量 慎用!!!!
}