检查文件是否存在

在此程序同目录下创建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. 如何实现大麦场在线选座 svg js

    本实例来源于此网站,内有Demo,可查看 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  2. 五种IO模型

    参考文档 https://www.jianshu.com/p/486b0965c296 概念说明 用户空间和内核空间        现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空 ...

  3. spring(一)IOC & AOP

    参考文档: spring详解:http://www.cnblogs.com/ysocean/p/7466191.html(可以说非常详细了) aop源码详解:https://www.cnblogs.c ...

  4. Java编程思想之五初始化与清理

    随着计算机革命的发展,"不安全"的编程方式已经逐渐称为编程代价高昂的主因之一. 初始化和清理正是涉及安全的两个问题. 5.1 用构造器确保初始化 通过提供构造器,类的设计者可确保每 ...

  5. Windows curl开启注意事项

      php.ini 开启curl扩展 设置有时候开启之后,curl还是不行:将php目录下的libssh2.dll复制到apache/bin下.(基本上可以成功) 如果没有开启成功,将php安装目录下 ...

  6. dubbo连接过程

    场景1 启动时 dubbo服务提供端在Zookeeper上注册的节点目录:假设接口名称是:com.bob.dubbo.service.CityDubboService dubbo服务提供端连接到注册中 ...

  7. python安装 werkzeug

    1 pip install werkzeug     Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库.这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web ...

  8. Mysql 有数据更新,无则插入

    项目中需要去更新数据的版本号. INSERT INTO Biz_CourseErrorBookDetail (CourseID,QuestionID,StudentID,ErrorCount,Last ...

  9. (原创)C++ 同步队列

    (原创)C++ 同步队列 同步队列作为一个线程安全的数据共享区,经常用于线程之间数据读取,比如半同步半异步线程池的同步队列. 其实做起来比较简单,要用到list.锁和条件变量,条件变量的作用是在队列满 ...

  10. 大数据web管理工具——HUE

    一.概述 HUE是一个开源的Apache Hadoop UI系统,早期由Cloudera开发,后来贡献给开源社区.它是基于Python Web框架Django实现的.通过使用Hue我们可以通过浏览器方 ...