准备一个文件 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. 卡尔曼滤波(Kalman Filter) ZZ

    一.引言 以下我们引用文献[1]中的一段话作为本文的開始: 想象你在黄昏时分看着一仅仅小鸟飞行穿过浓密的丛林.你仅仅能隐隐约约.断断续续地瞥见小鸟运动的闪现.你试图努力地猜測小鸟在哪里以及下一时刻它会 ...

  2. C# System.Collections.SortedList

    using System; using System.Collections; public class SamplesSortedList { public static void Main() { ...

  3. zabbix 客户端安装配置

      1.下载zabbix wget http://netix.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.7/zabb ...

  4. Microsoft/Git-Credential-Manager-for-Mac-and-Linux

    纠正Mac上的错误: Fatal: java.lang.Error encountered. Details: unexpected errorfatal: credential helper '!/ ...

  5. Junit学习笔记之五:MockMVC

    原文:https://blog.csdn.net/xiao_xuwen/article/details/52890730 随着RESTful Web Service的流行,测试对外的Service是否 ...

  6. (原)Show, Attend and Translate: Unsupervised Image Translation with Self-Regularization and Attention

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/9333844.html 论文网址:https://arxiv.org/abs/1806.06195 在 ...

  7. 基于Centos搭建 Mono 开发环境

    系统要求: CentOS 7.2 64 位操作系统 安装 Mono 安装前的准备 yum install yum-utils 执行命令添加安装包仓库 rpm --import "http:/ ...

  8. WineBottler for Mac(Mac 运行 exe 程序工具)安装

    1.软件简介    WineBottler 是 macOS 系统上一款模拟 Windows 环境的工具,让你能够在 Mac 上安装 Windows 软件,类似于知名的 Crossover,但 Wine ...

  9. [Aaronyang] 写给自己的WPF4.5 笔记11[自定义控件-AyImageButton的过程 1/4]

    我的文章一定要对读者负责-否则不是好文章  ----       www.ayjs.net  aaronyang技术分享 文章导航: 介绍vs2013 WPF开发,属性代码相关技巧 实战AyImage ...

  10. Linux说明书 - man浅谈

    原文链接: http://www.cnblogs.com/xuxn/archive/2011/08/26/linux-manual-man-command.html 所有学过Linux的同学都应该知道 ...