准备一个文件 imooc.txt

hello world!

一、使用 io/ioutil 包

定义一个 check 函数

func check(err error) {
if err != nil {
fmt.Println(err)
}
}

1. 读文件(使用 ReadFile 或 ReadAll)

// ReadFile 直接读文件=> 切片序列
func demo_read_file(title string) {
b, err := ioutil.ReadFile(title)
if err != nil {
fmt.Println(err)
}
fmt.Printf("ReadFile:%q\n", string(b))
} // ReadAll 读取一个 io.Reader,返回字节序列
func demo_read_all(title string) {
f, err := os.Open(title)
check(err)
defer f.Close()
// 读取整个 Reader流
b, err := ioutil.ReadAll(f)
check(err)
fmt.Printf("ReadAll: %q\n", string(b))
}

输出

ReadFile:"hello world!"
ReadAll: "hello world!"

2. 写文件(使用 WriteFile)

// WriteFile 直接将切片序列=> 文件
func demo_write_file() {
// 如果文件不存在,则创建一个文件(有权限的话);否则清空文件。
err := ioutil.WriteFile("imooc.txt", []byte("hello write!"), 0644)
if err != nil {
fmt.Println(err)
}
}

再读一遍,输出:

ReadFile:"hello write!"

二、使用 os包

1. 打开文件

// Open 以O_RDONLY 的方式来打开文件
func demo_open() {
f, err := os.Open("imooc.txt")
if err != nil {
fmt.Println(err)
}
defer f.Close()
fmt.Println(f.Fd())
} // OpenFile 以自定义的方法打开文件
func demo_open_file() {
f, err := os.OpenFile("imooc.txt", os.O_RDWR|os.O_CREATE, 0775)
if err != nil {
fmt.Println(err)
}
defer f.Close()
fmt.Println(f.Fd())
}

输出


2. 读方法

// 读方法
func demo_read() {
f, err := os.OpenFile("imooc.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0775)
check(err)
defer f.Close() buf := make([]byte, 2)
_, err = f.Read(buf)
check(err)
fmt.Printf("Read1: %q\n", string(buf)) // 第一个参数为偏移的大小;第二个位置为 0,1,2,分别代表开头,当前,结尾
f.Seek(4, 1) _, err = f.Read(buf)
check(err)
fmt.Printf("Read2: %q\n", string(buf)) r := bufio.NewReader(f)
// 读取指定位数
b, err := r.Peek(4)
check(err)
fmt.Printf("Peek: %q\n", string(b)) }

输出

Read1: "he"
Read2: "wr"
Peek: "ite!"

3. 写方法

// 写方法
func demo_write() {
f, err := os.Create("imooc.bak")
check(err)
defer f.Close() // b := []byte{115, 111, 109, 101, 10}
b := []byte("你好\n") // 如果文件存在,则清空文件。在打开的一个文件中,内容是往后添加,直到Close 该文件
n, err := f.Write(b)
check(err)
fmt.Printf("Write: %d\n", n) n, err = f.WriteString("我们啊\n")
check(err)
fmt.Printf("WriteString: %d\n", n) f.Sync() w := bufio.NewWriter(f)
n, err = w.WriteString("buffered\n")
check(err)
fmt.Printf("bufio WriteString: %d\n", n) // 必须刷新,才能看到文件内容
w.Flush()
}

再读一遍,输出

Write:
WriteString:
bufio WriteString:
ReadFile:"你好\n我们啊\nbuffered\n"

三、整个文件

// demo_file.go

package main

import (
"bufio"
"fmt"
"io/ioutil"
"os"
) func check(err error) {
if err != nil {
fmt.Println(err)
}
} // ---- 使用io/ioutil ---- // ReadFile 直接读文件=> 切片序列
func demo_read_file(title string) {
b, err := ioutil.ReadFile(title)
if err != nil {
fmt.Println(err)
}
fmt.Printf("ReadFile:%q\n", string(b))
} // WriteFile 直接将切片序列=> 文件
func demo_write_file() {
// 如果文件不存在,则创建一个文件(有权限的话);否则清空文件。
err := ioutil.WriteFile("imooc.txt", []byte("hello write!"), 0644)
if err != nil {
fmt.Println(err)
}
} // ReadAll 读取一个 io.Reader,返回字节序列
func demo_read_all(title string) {
f, err := os.Open(title)
check(err)
defer f.Close()
// 读取整个 Reader流
b, err := ioutil.ReadAll(f)
check(err)
fmt.Printf("ReadAll: %q\n", string(b))
} // ---- 使用os ---- // Open 以O_RDONLY 的方式来打开文件
func demo_open() {
f, err := os.Open("imooc.txt")
if err != nil {
fmt.Println(err)
}
defer f.Close()
fmt.Println(f.Fd())
} // OpenFile 以自定义的方法打开文件
func demo_open_file() {
f, err := os.OpenFile("imooc.txt", os.O_RDWR|os.O_CREATE, 0775)
if err != nil {
fmt.Println(err)
}
defer f.Close()
fmt.Println(f.Fd())
} // 读方法
func demo_read() {
f, err := os.OpenFile("imooc.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0775)
check(err)
defer f.Close() buf := make([]byte, 2)
_, err = f.Read(buf)
check(err)
fmt.Printf("Read1: %q\n", string(buf)) // 第一个参数为偏移的大小;第二个位置为 0,1,2,分别代表开头,当前,结尾
f.Seek(4, 1) _, err = f.Read(buf)
check(err)
fmt.Printf("Read2: %q\n", string(buf)) r := bufio.NewReader(f)
// 读取指定位数
b, err := r.Peek(4)
check(err)
fmt.Printf("Peek: %q\n", string(b)) } // 写方法
func demo_write() {
f, err := os.Create("imooc.bak")
check(err)
defer f.Close() // b := []byte{115, 111, 109, 101, 10}
b := []byte("你好\n") // 如果文件存在,则清空文件。在打开的一个文件中,内容是往后添加,直到Close 该文件
n, err := f.Write(b)
check(err)
fmt.Printf("Write: %d\n", n) n, err = f.WriteString("我们啊\n")
check(err)
fmt.Printf("WriteString: %d\n", n) f.Sync() w := bufio.NewWriter(f)
n, err = w.WriteString("buffered\n")
check(err)
fmt.Printf("bufio WriteString: %d\n", n) // 必须刷新,才能看到文件内容
w.Flush()
} func main() {
// demo_read_file("imooc.txt")
// demo_read_all("imooc.txt")
// demo_write_file()
// demo_read_file("imooc.txt")
// demo_open()
// demo_open_file()
// demo_read()
demo_write()
demo_read_file("imooc.bak")
}

四、os 包的其他方法(os

func IsExist(err error) bool
func IsNotExist(err error) bool func Mkdir(name string, perm FileMode) error
func MkdirAll(path string, perm FileMode) error func Remove(name string) error
func RemoveAll(path string) error
func Rename(oldpath, newpath string) error func (m FileMode) IsDir() bool
func (m FileMode) IsRegular() bool

go 的文件处理的更多相关文章

  1. Mapreduce的文件和hbase共同输入

    Mapreduce的文件和hbase共同输入 package duogemap;   import java.io.IOException;   import org.apache.hadoop.co ...

  2. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  3. 01.SQLServer性能优化之----强大的文件组----分盘存储

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...

  4. SQL Server 大数据搬迁之文件组备份还原实战

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...

  5. SQLSERVER将一个文件组的数据移动到另一个文件组

    SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...

  6. SQL Server中的高可用性(2)----文件与文件组

        在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...

  7. C# ini文件操作【源码下载】

    介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...

  8. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  9. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  10. GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级

    一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...

随机推荐

  1. Android中将十六进制 颜色代码 转换为int类型数值

    Android中 将 十六进制 颜色代码 转换为  int   类型数值 方法  : Color.parseColor("#00CCFF") 返回 int 数值 来自为知笔记(Wi ...

  2. [转]BLAS简介

    BLAS(Basic Linear Algebra Subprograms)是一组线性代数计算中通用的基本运算操作函数集合[1] .BLAS Technical (BLAST) Forum负责规范BL ...

  3. funny

    var life = { "work_hard","have_fun","make_history" };

  4. 外贸圈 贸易经 外贸心路 一位成功外贸人的SOHO心得

    一位成功外贸人的SOHO心得 外贸圈http://waimaoquan.alibaba.com/wm Jade,高中毕业,93年进入外贸行业,刚开始,只是在公司的外贸仓库工作,10多年后的今天,他已成 ...

  5. JSP 性能优化

    无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaScript 执行过程耗时越久,浏览器等待响应用户输入的时间就越长.浏览器在下载和执行 ...

  6. ClassicFTP for Mac(FTP 客户端)破解版安装

    1.软件简介    ClassicFTP 是 macOS 系统上一款易于使用的 FTP 客户端,让您能够从远程服务器(网站)或网络查看,编辑,上传,下载和删除文件的免费的软件.Mac 下的一款使用 F ...

  7. redis 连接 docker容器 6379端口失败

    redis部署在docker容器中Could not connect to Redis 容器内redis-cli是可以直接连上的,但是在另一台服务器上就不能用外网ip来连了 虽然我创建redis容器时 ...

  8. Atitit mysql数据库统计信息

    Atitit mysql数据库统计信息 SELECT table_name, table_rows, index_length, data_length, auto_increment, create ...

  9. What-is-DevOps

    https://www.quora.com/What-is-DevOps https://neoteric.eu/blog/devops-a-culture-of-getting-things-don ...

  10. tensorflow 笔记7:tf.concat 和 ops中的array_ops.concat

    用于连接两个矩阵: mn = array_ops.concat([a, d], 1) #  按照第二维度相接,shape1 [m,a] shape2 [m,b] ,concat_done shape ...