Golang文件操作大全

文件信息

获取单文件信息

fileInfo, err := os.Stat("./test.txt")  
if err != nil {  
   fmt.Println("err:", err.Error())  
} else {  
   fmt.Printf("%T \n", fileInfo)  
   fmt.Printf("%v \n", fileInfo)  
   //文件名  
   fmt.Println(fileInfo.Name())  
   //是否是目录  
   fmt.Println(fileInfo.IsDir())  
   //文件尺寸大小  
   fmt.Println(fileInfo.Size())  
   //mode 权限  
   fmt.Println(fileInfo.Mode())  
   //文件最后修改时间  
   fmt.Println(fileInfo.ModTime())  
}

遍历文件夹信息

dir, err := ioutil.ReadDir(path)  
if err != nil {  
   fmt.Println("ReadDir err ,", err)  
   return  
}
//FileInfo是接口类型
for _, v := range dir {  
	//文件名
	fmt.Println(v.Name())  
	//mode 权限
	fmt.Println(v.Mode())  
	//是否是目录
	fmt.Println(v.IsDir()) 
	//文件最后修改时间 
	fmt.Println(v.ModTime()) 
	//文件尺寸大小
	fmt.Println(v.Size()) 
}

判断是否是绝对路径

filepath.IsAbs(path string)

判断文件或文件夹是否存在

func PathExists(path string) (bool,error) {
	_,err := os.Stat(path)
	if err == nil {
		return true,nil
	}
	if os.IsNotExist(err) {
		return false,nil
	}
	return false,err

获取相对路径

filepath.Rel(basepath, targpath string)

获取绝对路径

filepath.Abs(path string)

拼接路径

//不需要拼接符
path.Join(path1,path2,...)

文件操作

创建文件夹

//如果文件夹存在,报错
os.MKdir("./abc", 777) 

//如果文件夹存在,不会报错
os.MKdirAll("./abc", 777) 

创建文件

//如果文件存在,会覆盖
os.Create() --> *file 

打开文件

os.Open(filename)

/**
第一个参数:文件名称
第二个参数:文件的打开方式
	O_RDONLY:只读模式(read-only)
	O_WRONLY:只写模式(write-only)
	O_RDWR:读写模式(read-write)
	O_APPEND:追加模式(append)
	O_CREATE:文件不存在就创建(create a new file if none exists.)
第三个参数:文件的权限:文件不存在创建文件,需要指定权限
*/
os.OpenFile(filename,mode,perm)

关闭文件

file.Close()

删除文件

os.Remove()

os.RemoveAll()

文件读取

os.Open
func main() {  
   // 读取文件 方法1  
   file, err := os.Open("./test.txt")  
   // 关闭文件流  
   defer file.Close()  
   if err != nil {  
      fmt.Println("打开文件出错")  
   }  
   // 读取文件里面的内容  
   var tempSlice = make([]byte, 1024)  
   var strSlice []byte  
   for {  
      n, err := file.Read(tempSlice)  
      if err == io.EOF {  
         fmt.Printf("读取完毕")  
         break  
      }  
      fmt.Printf("读取到了%v 个字节 \n", n)  
      strSlice = append(strSlice, tempSlice...)  
  
   }  
   fmt.Println(string(strSlice))  
}
bufio
func main() {  
   // 读取文件 方法2  
   file, err := os.Open("./test.txt")  
   // 关闭文件流  
   defer file.Close()  
   if err != nil {  
      fmt.Println("打开文件出错")  
   }  
   // 通过创建bufio来读取  
   reader := bufio.NewReader(file)  
   var fileStr string  
   var count int = 0  
   for {  
      // 相当于读取一行  
      str, err := reader.ReadString('\n')  
      if err == io.EOF {  
         // 读取完成的时候,也会有内容  
         fileStr += str  
         fmt.Println("读取结束", count)  
         break  
      }  
      if err != nil {  
         fmt.Println(err)  
         break  
      }  
      count++  
      fileStr += str  
   }  
   fmt.Println(fileStr)  
}

ioutil
// 通过IOUtil读取
byteStr, _ := ioutil.ReadFile("./test.txt")
fmt.Println(string(byteStr))

文件写入

os.OpenFile
os.Open()是用只读方式打开文件,所以无法写入
file, _ := os.OpenFile("./main/test.txt", os.O_CREATE | os.O_RDWR | os.O_APPEND, 777)
defer file.Close()
str := "啦啦啦 \r\n"
file.WriteString(str)
bufio
// 打开文件
file, _ := os.OpenFile("./main/test.txt", os.O_CREATE | os.O_RDWR | os.O_APPEND, 777)
defer file.Close()
str := "啦啦啦 \r\n"
file.WriteString(str)

// 通过bufio写入
writer := bufio.NewWriter(file)
// 先将数据写入缓存
writer.WriteString("你好,我是通过writer写入的 \r\n")
// 将缓存中的内容写入文件
writer.Flush()	

ioutil
// 第三种方式,通过ioutil
str2 := "hello"
ioutil.WriteFile("./main/test.txt", []byte(str2), 777)

文件复制

// 读取文件
byteStr, err := ioutil.ReadFile("./main/test.txt")
if err != nil {
    fmt.Println("读取文件出错")
    return
}
// 写入指定的文件
ioutil.WriteFile("./main/test2.txt", byteStr, 777)

文件重命名

os.Rename(oldName, newName)  

临时文件 (夹)

需要调用者使用完后自行删除临时文件(夹)
//获取系统中的临时目录
os.TempDir()

//创建临时文件夹
//在当前目录下,创建一个以指定字符串为前缀的临时文件夹,并返回文件夹路径
//同ioutil.TempDir()
filename, err := os.MkdirTemp("./", "temp")  
if err != nil {  
   fmt.Println("创建目录失败", err.Error())  
} else {  
   fmt.Println(filename)  
}

//创建临时文件
//在当前目录下,创建一个以指定字符串为前缀的文件,并以读写模式打开文件,并返回os.File指针对象  
//同ioutil.TempFile()
file1, err := os.CreateTemp(filename, "temp")  
if err != nil {  
   fmt.Println("创建文件失败", err.Error())  
} else {  
   file1.WriteString("写入内容:" + file1.Name())  
}  
file1.Close()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值