检查文件是否存在

在此程序同目录下创建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. MySQL InnoDB 群集–在Windows上设置InnoDB群集

    InnoDB集群最需要的功能之一是Windows支持,我们现在已将其作为InnoDB Cluster 5.7.17预览版 2的一部分提供.此博客文章将向您展示如何在MS Windows 10上运行In ...

  2. 常用方法 Entitys转换为DataTable

    效率比较屁,将近可以用 public static DataTable EntitiesToDataTable<T>(List<T> entitys) { Type t = t ...

  3. 切比雪夫定理(Chebyshev's theorem)与经验法则(Empirical Rule)

    切比雪夫定理(Chebyshev's theorem):适用于任何数据集,而不论数据的分布情况如何. 与平均数的距离在z个标准差之内的数值所占的比例至少为(1-1/z2),其中z是大于1的任意实数. ...

  4. OpenFlow和SDN的历史和原理介绍

    OpenFlow相关的历史.新闻:http://blog.csdn.net/jincm13/article/details/7825754起源与发展[https://36kr.com/p/503598 ...

  5. glew的安装

    下载链接: https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-win32.z ...

  6. oracle 根据身份证号计算出生日期

      1.情景展示 如何根据身份证号推算出出生日期? 2.解决方案 --根据身份证号计算出生日期 SELECT DECODE(LENGTH(ID_CARD), 18, SUBSTR(ID_CARD, 7 ...

  7. DataGrip:Error encountered when performing Introspect schema xxx 错误的解决方法

    datagrip的问题,转载自: https://www.cnblogs.com/geb515/p/7995249.html 把Introspect using JDBC _metadata打上勾 然 ...

  8. [Beta]Scrum Meeting#3

    github 本次会议项目由PM召开,时间为5月8日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客整理文档 撰写博客整理文档 swoip 改进界面 改进界面 bh ...

  9. window系统对应默认IE浏览器版本

  10. Java编程思想之三 操作符

    在底层,Java中的数据是通过使用操作符来操作的. 3.2 使用Java操作符 操作符接收一个或多个参数,并生成一个新值. 操作符作用于操作数,生成一个新值.有些操作符可能会改变操作数自身的值,这被称 ...