准备一个文件 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. Web缓存知识体系

     转载自[运维社区]https://www.unixhot.com/page/cache

  2. VirtualBox中出现UUID have already exists 解决方法

    虚拟机更换VDI文件,启动时会出现 "UUID already exists"的错误,这是因为删除虚拟机时候没有选择"删除所有",只是选择移除造成的. 方法一: ...

  3. TerminateProcess的使用问题

    最好时外部进程来结束目标进程,类似于任务管理器的结束目标进程方式.如果是自身进程想结束自身,可能不同版本的windows行为不一致,有一些能自身强制退出,有一些强制退出不了. 本来MSDN上就说了这个 ...

  4. MFC总结之CListCtrl用法及技巧

    复制于:http://www.cnblogs.com/lidabo/archive/2012/08/23/2652796.html 1.基本操作 分别从下面四点来介绍CListCtrl的基本操作: ① ...

  5. Swift 弱引用与无主引用

    前言 Swift 提供了两种解决循环引用的方法,弱引用和无主引用. 弱引用和无主引用可以使循环中的一个实例引用另一个实例时不使用强引用. 1.弱引用 对生命周期中会变为 nil 的实例采用弱引用,也就 ...

  6. blinn-phong高光反向穿透问题

    blinn-phong高光: H=normalize(V+L);
 specular=pow(saturate(dot(N,H)),shiness); 会遇到如下问题: 图中光源在surface背面, ...

  7. 转移 Visual Studio 2017 的安装临时文件

    每次更新 Visual Studio 2017 会在 C 盘留下大量的缓存文件,因为目录比较深,怕以后忘了,用目录链接的形式转移到其它磁盘,也好方便清理: mklink /D C:\ProgramDa ...

  8. elasticsearch中 refresh 和flush区别【转】

    elasticsearch中有两个比较重要的操作:refresh 和 flush refresh操作 当我们向ES发送请求的时候,我们发现es貌似可以在我们发请求的同时进行搜索.而这个实时建索引并可以 ...

  9. 你知道element中el-table的列名中不能含有" . "吗?

    [本文出自天外归云的博客园] Vue+element比较流行,但是element有个坑,就是element的表格列名中不能含有点儿" . ",否则数据都显示不出来. 在elemen ...

  10. PHP-X介绍

      为什么要开发PHP扩展 PHP-X是用来开发PHP扩展的库.PHP代码写得好好的,为啥要开发PHP扩展呢? 1.我们知道PHP不擅长CPU密集型的操作,那么把CPU密集型的相关代码迁移到扩展上,就 ...