在上一篇文章中,我们介绍了常用的文件读写操作,今天接着来研究一下,除了读写以外的其他常见文件操作。

一、创建目录:

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: 读写之外的其他文件操作的更多相关文章

  1. golang中的文件操作

    一.文件的基本介绍 文件是数据源(保存数据的地方)的一种,比如经常使用的word文档,txt文件,excel文件都是文件.文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音等等. ...

  2. golang读写文件

    1. 标准输入输出 os提供了标准输入输出文件: Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin") Stdout = Ne ...

  3. Golang文件操作整理

    基本操作 文件创建 创建文件的时候,一定要注意权限问题,一般默认的文件权限是 0666 关于权限的相关内容,具体可以参考鸟叔p141 这里还是再回顾下,文件属性 r w x r w x r w x,第 ...

  4. C语言的fopen函数(文件操作/读写)

    头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:    FILE * fopen(const char * path, c ...

  5. Delphi的文件操作(定义,关联,打开,读写,关闭)

    参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...

  6. golang文件操作

    一.读写文件 1.读文件操作 os.File 封装所有文件相关操作 例子: package main import ( "fmt" "os" "io/ ...

  7. python之文件的读写和文件目录以及文件夹的操作实现代码

    这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...

  8. pytthon—day8 读写模式的结合、文件操作模式、with完成文本文件复制、游标操作

    一.读写模式的结合 w:写指没有新建文件,有文件就清空 w=open('1.txt','w',encoding='utf-8') w.write('000\n') 在写入数据时,需要及时处理内存空间, ...

  9. Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化

    IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...

随机推荐

  1. Powershell更新

    问题:在vin7电脑启动vagrant up 提示powershell版本过低. 在vin7电脑启动vagrant up 提示powershell版本过低: The version of powers ...

  2. Guava 源码分析之Cache的实现原理

    Guava 源码分析之Cache的实现原理 前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛. 我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Goog ...

  3. Gamma阶段第九次scrum meeting

    每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91(持续完成) # ...

  4. spring boot2X整合nacos一使用Feign实现服务调用

    服务调用有两种方式: A.使用RestTemplate 进行服务调用 查看 B.使用Feign 进行声明式服务调用 上一次写了使用RestTemplate的方式,这次使用Feign的方式实现 服务注册 ...

  5. IDEA中,使用maven-可视化-下载jar包的source和javadoc

    需求:想看jar包的源码和文档注释 操作:在Idea的右侧Maven窗口,选中一个Module,然后展开Dependencies|,选中一个依赖包,按住鼠标右键单击,选择Download Source ...

  6. docker 学习操作记录 5-2

    记录5-2 root@53d0a643a2c7:/# quit bash: quit: command not found root@53d0a643a2c7:/# exit exit -->@ ...

  7. ZYNQ笔记(5):软中断实现核间通信

    ZYNQ包括一个 FPGA 和两个 ARM,多个 ARM 核心相对独立的运行不同的任务,每个核心可能运行不同的操作系统或裸机程序,但是有一个主要核心,用来控制整个系统以及其他从核心的允许.因此我们可以 ...

  8. c/c++封装成python包

    参考网址:https://blog.csdn.net/tiankongtiankong01/article/details/80420033 SWIG (Simplified Wrapper and ...

  9. 百度前端技术学院task15源代码

    这一道题涉及到排序,读取页面内容,输出显示到某一节点当中以及添加事件. 刚开始一直在想怎么获取某一节点的内容,后面采用的是sdata.childNodes,获取所有的节点.再通过schildNode[ ...

  10. golang 学习笔记 --基本类型

    字符串值表示了一个一个字符值的集合,在底层,一个字符串值即一个包含了若干字节的序列,长度为0的序列与一个空字符串对应.字符串的长度即底层字节列中字节的个数. 字符串值是不可变的,对字符串的操作只会返回 ...