检查文件是否存在

在此程序同目录下创建log.txt文件,以检测。

package main

import (
"os"
"fmt"
) func main() {
if _, err := os.Stat("log.txt"); err == nil {
fmt.Println("Log.txt file exists")
}
}

检查文件是否不存在

package main

import (
"os"
"fmt"
) func main() {
// IsNotExist函数定义:func IsNotExist(err error) bool
// 返回一个布尔值说明该错误是否表示一个文件或目录不存在
if _, err := os.Stat("log.txt"); os.IsNotExist(err) {
fmt.Println("Log.txt file does not exist")
} else {
fmt.Println("Log.txt file exists")
}
}

读取文件内容

在此程序同目录下创建name.txt文件,以检测。

package main

import (
"io/ioutil"
"fmt"
) func main() {
contentBytes, err := ioutil.ReadFile("name.txt")
if err == nil {
// ReadFile返回[]byte
fmt.Println(string(contentBytes))
}
}

写入文件

在此程序同目录下创建hello_world文件。

package main

import (
"io/ioutil"
"fmt"
) func main() {
hello := "Hello, World"
// WriteFile接受三个参数,要写入的文件名,写入的[]byte,以及写入权限
err := ioutil.WriteFile("hello_world", []byte(hello), 0644)
if err != nil {
fmt.Println(err)
}
}

创建临时文件

package main

import (
"io/ioutil"
"fmt"
) func main() {
helloWorld := "Hello, World"
// TempFile定义:func TempFile(dir, prefix string) (f *os.File, err error)
// 在dir目录下创建一个新的、使用prefix为前缀的临时文件,
// 以读写模式打开该文件并返回os.File指针。
file, err := ioutil.TempFile("", "hello_world_temp")
if err != nil {
panic(err)
}
// defer os.Remove(file.Name())
if _, err := file.Write([]byte(helloWorld)); err != nil {
panic(err)
}
fmt.Println(file.Name())
}

计算文件行数

在程序同目录下创建"names.txt"文件,随便写几行字。

package main

import (
"os"
"bufio"
"fmt"
) func main() {
file, _ := os.Open("names.txt")
fileScanner := bufio.NewScanner(file)
lineCount := 0
for fileScanner.Scan() {
lineCount++
}
defer file.Close()
fmt.Println(lineCount)
}

读取文件特定行

package main

import (
"os"
"bufio"
"fmt"
) func main() {
fmt.Println(readLine(2))
} func readLine(lineNumber int) string {
file, _ := os.Open("names.txt")
fileScanner := bufio.NewScanner(file)
lineCount := 0
for fileScanner.Scan() {
if lineCount == lineNumber {
return fileScanner.Text()
}
lineCount++
}
defer file.Close()
return ""
}

比较两个文件的内容

package main

import (
"fmt"
"io/ioutil"
"bytes"
) func main() {
one, err := ioutil.ReadFile("one.txt")
if err != nil {
panic(err)
}
two, err2 := ioutil.ReadFile("two.txt")
if err2 != nil {
panic(err2)
}
// Equal返回bool值
same := bytes.Equal(one, two)
fmt.Println(same)
}

删除文件

package main

import "os"

func main() {
err := os.Remove("new.txt")
if err != nil {
panic(err)
}
}

复制或移动文件

package main

import (
"os"
"io"
) func main() {
original, err := os.Open("original.txt")
if err != nil {
panic(err)
}
defer original.Close()
original_copy, err2 := os.Create("copy.txt")
if err2 != nil {
panic(err2)
}
defer original_copy.Close()
// Copy(1, 2) -> 把2拷贝到1
_, err3 := io.Copy(original_copy, original)
if err3 != nil {
panic(err3)
}
}
// 移动文件:拷贝之后利用os.Remove()删除原文件

重命名文件

package main

import "os"

func main() {
os.Rename("old.txt", "new.txt")
}

删除目录及文件

package main

import (
"os"
"fmt"
) func main() {
// Remove无法删除非空文件夹,RemoveAll可以
err := os.RemoveAll("hello")
if err != nil {
panic(err)
}
}

列出目录下所有文件

创建一个hello文件夹,在文件夹内创建两个文件,main文件和hello文件夹并列。

.
├── hello
│ ├── 1.txt
│ └── 2.txt
└── main.go
package main

import (
"io/ioutil"
"fmt"
) func main() {
files, err := ioutil.ReadDir("hello")
if err != nil {
panic(err)
}
for _, f := range files {
fmt.Println(f.Name())
}
}

Go基础编程实践(六)—— 文件的更多相关文章

  1. Go基础编程实践(九)—— 网络编程

    下载网页 package main import ( "io/ioutil" "net/http" "fmt" ) func main() ...

  2. Go基础编程实践(十)—— 数据库

    从数据库中读取数据 在http://sqlitebrowser.org/下载sqlite3可视化工具,在本main.go同目录下创建personal.db数据库,创建表如下: package main ...

  3. Go基础编程实践(八)—— 系统编程

    捕捉信号 // 运行此程序,控制台将打印"Waiting for signal" // 按Ctrl + C 发送信号以关闭程序,将发生中断 // 随后控制台依次打印"Si ...

  4. Go基础编程实践(七)—— 并发

    同时运行多个函数 观察常规代码和并发代码的输出顺序. // 常规代码,顺序执行,依次输出 package main import ( "fmt" "time" ...

  5. Go基础编程实践(五)—— 错误和日志

    自定义错误类型 Go中可以使用errors.New()创建错误信息,也可以通过创建自定义错误类型来满足需求.error是一个接口类型,所有实现该接口的类型都可以当作一个错误类型. // error类型 ...

  6. Go基础编程实践(四)—— 数组和map

    数组去重 package main import "fmt" func main(){ intSlice := []int{1,5,5,5,5,7,8,6,6, 6} fmt.Pr ...

  7. Go基础编程实践(三)—— 日期和时间

    日期和时间 package main import ( "fmt" "time" ) func main() { // 获取当前时间 current := ti ...

  8. Go基础编程实践(二)—— 类型转换

    bool to string strconv包的FormatBool函数用于将bool转为string package main import ( "fmt" "strc ...

  9. Go基础编程实践(一)—— 操作字符串

    修剪空格 strings包中的TrimSpace函数用于去掉字符串首尾的空格. package main import ( "fmt" "strings" ) ...

随机推荐

  1. BZOJ 4816[SDOI2017]数字表格(莫比乌斯反演)

    题目链接 \(Description\) 用\(f_i\)表示\(fibonacci\)数列第\(i\)项,求\(\prod_{i=1}^{n}\prod_{j=1}^{m}f[gcd(i,j)]\) ...

  2. 浅谈LCA

    目录 什么是LCA 倍增求LCA dfs bfs 树剖求LCA 什么是LCA LCA就是最近公共祖先 对于有根树\(Tree\)的两个结点\(u.v\),最近公共祖先\(LCA(T,u,v)\)表示一 ...

  3. Zabbix实战-简易教程--中间件RabbitMQ监控

    一.环境 zabbix版本:3.0 二.脚本说明 .├── rabbitmq.template.xml   模板文件├── scripts  │   └── rabbitmq│   ├── api.p ...

  4. leetcode 221. 最大正方形

    题目描述: 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 思路分析: 一道动态规划的题.由于是正方形,首先单一的‘1’即为最小的正方形,接下来需要考察其外围区域 ...

  5. 深入SaltStack

    [译者注] 这是一篇发表在opencredo官网的博文,通过比较流行的Puppet和新发展起来的Salt,详细地介绍了Salt的功能.在征得原作者的同意后,翻译出来,与大家分享.初次翻译长文,请大家指 ...

  6. 虚拟机ubuntu16下cheese打开摄像头黑屏问题

    在win7上安装了一个ubuntu1604的虚拟机: 在虚拟机下打开电脑上连接的摄像头时,用ubuntu16自带的cheese软件查看是黑屏: 但是cheese上有摄像头名字显示,就是打不开:如下图 ...

  7. eclispe: 修改所有文件默认编码为UTF-8

    1.修改 workspace text file encoding 依次点击windows -> Preferences -> general -> Workspace,修改如图的编 ...

  8. Numa 常用命令

    1. 查看numa相关信息,包括每个node内存大小,每个node中的逻辑cpu: numactl --hardware

  9. 解决ImportError: No module named utils

    转载:https://blog.csdn.net/weixin_43979572/article/details/86159265 在Python中遇到了导包错误,其实包已经有了.原因是我再B文件的a ...

  10. Laravel 登录后跳转回登录前浏览的页面

    一.经过 Auth 中间件检查后跳转至登录页面 也就是没有通过 auth 中间件的认证检查,被 auth 中间件拦截后跳转至登录页面.这种情况下,Laravel 默认会在用户登录成功后自动跳转回登录前 ...