Golang: 读写之外的其他文件操作
在上一篇文章中,我们介绍了常用的文件读写操作,今天接着来研究一下,除了读写以外的其他常见文件操作。
一、创建目录:
package main
import (
"fmt"
"os"
)
func main() {
// 创建单个目录
os.Mkdir("go", os.ModePerm)
// 创建多级目录
os.MkdirAll("go/lang", os.ModePerm)
// 返回FileInfo实例
info, _ := os.Stat("go/lang")
printFileInfo(info)
}
// 显示文件信息
func printFileInfo(info os.FileInfo) {
fmt.Printf("name: %v \n", info.Name()) // 文件名
fmt.Printf("size: %v \n", info.Size()) // 文件大小
fmt.Printf("mode: %v \n", info.Mode()) // 文件权限
fmt.Printf("is dir: %v \n", info.IsDir()) // 是否为目录类型
fmt.Printf("modify time: %v \n", info.ModTime()) // 最后修改时间
}
os.Mkdir() 方法只能创建单个目录,而 os.MkdirAll() 可以创建多级目录。
最后我们使用 os.State() 方法获取目录或文件的描述对象,通过这个对象,我们可以得到目录或文件的各种常用信息。
二、检测目录或文件是否存在:
package main
import (
"fmt"
"os"
)
func main() {
path := "go/lang/test.txt"
// 返回FileInfo实例
info, err := os.Stat(path)
// 检测文件或目录是否存在
if (os.IsNotExist(err)) {
// 创建文件
os.Create(path)
// 重新获取FileInfo
info, _ = os.Stat(path)
}
printFileInfo(info)
}
// 显示文件信息
func printFileInfo(info os.FileInfo) {
fmt.Printf("name: %v \n", info.Name())
fmt.Printf("size: %v \n", info.Size())
fmt.Printf("mode: %v \n", info.Mode())
fmt.Printf("is dir: %v \n", info.IsDir())
fmt.Printf("modify time: %v \n", info.ModTime())
}
如果 err 的值为 nil,则表示文件存在,可完成后续的操作。
如果要判断文件不存在,则要通过 os.isNotExist(err) 方法来检测。
三、列举目录下的所有文件:
package main
import (
"fmt"
"io/ioutil"
"path"
)
func main() {
dirPath := "go/lang"
// 利用ioutil读取目录
files, _ := ioutil.ReadDir(dirPath)
// 遍历目录
for _, fileInfo := range files {
fileName := fileInfo.Name()
// 拼接路径
filePath := path.Join(dirPath, fileName)
fmt.Println(filePath)
}
}
ioutil.ReadDir() 方法的完整签名是:func ReadDir(dirname string) ([]os.FileInfo, error),它返回一个 os.FileInfo 类型的切片,我们可以遍历这个结果,逐个处理目录下的每一个文件。
如果遍历的过程中遇到子目录,我们可以通过 fileInfo.IsDir() 来检测,如果检测结果是目录,则再进行递归调用即可。
值得一提的是,path/filepath 包提供了遍历多级目录的方法,下面我们演示一下:
package main
import (
"fmt"
"path/filepath"
"os"
)
func main() {
dirPath := "go"
filepath.Walk(dirPath, func(path string, fileInfo os.FileInfo, err error) error {
if fileInfo == nil {
return err
}
isDir := fileInfo.IsDir()
fmt.Println(path, "is dir?", isDir)
return nil
})
}
四、重命名文件:
package main
import (
"os"
)
func main() {
// 对文件重命名
os.Rename("go/lang/test.txt", "go/lang/test2.txt")
}
五、移除目录或文件:
package main
import (
"os"
)
func main() {
// 移除文件或空目录
os.Remove("go/lang/test2.txt")
// 移除文件或目录
os.RemoveAll("go")
}
os.Remove() 方法可以移除单个文件或空目录,如果想移除非空目录,则需要调用 os.RemoveAll() 方法来完成。
关于文件的操作方式还有很多,今天就先介绍到这里吧,后续有时间再补充。
Golang: 读写之外的其他文件操作的更多相关文章
- golang中的文件操作
一.文件的基本介绍 文件是数据源(保存数据的地方)的一种,比如经常使用的word文档,txt文件,excel文件都是文件.文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音等等. ...
- golang读写文件
1. 标准输入输出 os提供了标准输入输出文件: Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin") Stdout = Ne ...
- Golang文件操作整理
基本操作 文件创建 创建文件的时候,一定要注意权限问题,一般默认的文件权限是 0666 关于权限的相关内容,具体可以参考鸟叔p141 这里还是再回顾下,文件属性 r w x r w x r w x,第 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- Delphi的文件操作(定义,关联,打开,读写,关闭)
参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...
- golang文件操作
一.读写文件 1.读文件操作 os.File 封装所有文件相关操作 例子: package main import ( "fmt" "os" "io/ ...
- python之文件的读写和文件目录以及文件夹的操作实现代码
这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...
- pytthon—day8 读写模式的结合、文件操作模式、with完成文本文件复制、游标操作
一.读写模式的结合 w:写指没有新建文件,有文件就清空 w=open('1.txt','w',encoding='utf-8') w.write('000\n') 在写入数据时,需要及时处理内存空间, ...
- Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化
IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...
随机推荐
- day 17
Our life is frittered away by detail, simplify it, simplify it. 我们的生活都被琐事浪费掉了,简单点,简单点.
- gethostbyaddr
函数原型: #include<netdb.h> struct hostent * gethostbyaddr(const char *addr, socklen_t len, int fa ...
- vue-waterfall2 实现瀑布流,及总结的问题
1.安装 npm install vue-waterfall2@1.8.20 --save (提示:一定要安装1.8.20,最新版会有一部分问题) 2.打开main.js文件 import wa ...
- ASP.NET Core使用Docker-Compose实现多容器应用部署
一.需求背景 人生苦短,我用.NET Core!前面的<ASP.NET Core使用Docker进行容器化托管和部署>基础课程我们学习了如何使用Docker来部署搭建ASP.NET Cor ...
- 微慕WordPress小程序增强版
2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线.在过去的2年多的时间里,微信小程序领头,各大互联网平台也不甘落后,陆续推出自己的小程序.2018年7月4日,百度智能小程 ...
- Maven 教程(6)— Maven之pom.xml文件简单说明
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79543963 通过前面几部分知识,我们对maven已经有了初步的印象,就像Mak ...
- Java面向对象入门
Java面向对象入门 一.Java面向对象的基本组成 Java类及类的成员:属性.方法.构造器:代码块.内部类 面向对象三大特征:封装.继承.多态(抽象) 关键字:this.super.static. ...
- JavaScript的这个缺陷,让多少程序员为之抓狂?
相信提到JavaScript语言,每一个程序员的心理状态都是不一样的,有的对此深恶痛绝,有的又觉得其可圈可点,造成这种两级分化态度的原因还是由于其自身类型约束上的缺陷,直到现如今依旧无法解决. 本文由 ...
- -Shell 教程 Bash 脚本 基础语法 MD
目录 目录 Shell 简介 Shell 脚本 Shell 环境 第一个shell脚本 Shell 变量 定义变量 使用变量 只读变量 删除变量 Shell 字符串 单引号 双引号 字符串基本操作 S ...
- Mybatis 原理分析
对于入门程序的流程分析 使用过程 读配置文件 读取配置文件时绝对路径和相对路径(web工程部署后没有src路径)都有一定问题,实际开发中一般有两种方法 使用类加载器,它只能读取类路径的配置文件 使用S ...