准备一个文件 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. iOS开发-获取设备型号信息

    开发中有的时候查看设计统计数据,或者通过日志查看错误信息,这个时候我们就需要获取获取设备信息,看下关于设备有几种方法: NSLog(@"%@",[[UIDevice current ...

  2. DHCP服务原理与搭建(Linux系统+路由器,二选一方案)

    大家都知道上网的最基本前提是要在终端上设置IP.子网掩码.网关.DNS等地址信息,在家里或者在办公室很多时候打开电脑后发现就可以上网,并没有手动设置IP.掩码.DNS地址也能上网,这是什么原因呢?其实 ...

  3. domino server端的Notes.ini详解

    Web代理监控与调式问题     Web代理在服务器的执行优先级是最高的,由Web代理引发的服务器宕机现象很多,但是我们很难监控Web代理的运行.通过对notes.ini的研究可以通过如下途径进行处理 ...

  4. Jmeter+Ant+Jenkins搭建持续集成的接口测试(推荐 Mark)

    转自:http://my.oschina.net/hellotest/blog/516079 目录[-] 一.Jmeter+ant 二.Jmeter+ant+Jenkins 三.Tomcat配置虚拟目 ...

  5. C# 使用NLog记录日志入门操作

    环境:win7 64位, VS2010 1.首先用VS2010创建命令行工程NLogDemo 2.在程序包管理器控制台中输入:Install-Package NLog -Version 4.4.12 ...

  6. Android 全局弹出版本更新 Dialog 思考和解决办法

    Android 针对版本更新,需要做全局的弹出(需求:版本更新只需要在 App 内全局弹出就可以),思路是使用 AlertDialog ,然后设置 setType 为 TYPE_ALERT_WINDO ...

  7. 多进程vs多线程

    多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程.(当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多 ...

  8. 音视频编解码: YUV采样格式中的YUV444,YUV422,YUV420理解

    YUV各种采样格式的说明 通常我们用RGB表示一种彩色.计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色.而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像机 ...

  9. 【ZooKeeper】ZooKeeper入门流水记

    单机模式 下载zookeeper的包 wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.ta ...

  10. linux每日命令(17):which命令

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. locate 配合数据库查看文件位置. f ...