go 的文件处理
准备一个文件 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 的文件处理的更多相关文章
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- SQL Server中的高可用性(2)----文件与文件组
在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级
一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...
随机推荐
- [Mockito] Mock List interface
In this post, we are going to see more functionalities in Mockito. Mock a List interface: @Test publ ...
- 解决Gerrit的git unpack error问题
今天上午同事和我说neutron项目要换成全新的内部代码,原先仓库里的代码要全部废弃掉.于是我就简单地创建了一个空项目使用git push --force将其置空. 下午的时候,麻烦事情就来了,同事发 ...
- .NET 并行编程——数据并行
本文内容 并行编程 数据并行 环境 计算 PI 矩阵相乘 把目录中的全部图片复制到另一个目录 列出指定目录中的所有文件,包括其子目录 最近,对多线程编程,并行编程,异步编程,这三个概念有点晕了,之前我 ...
- gcc/g++ disable warnings in particular include files
当在编译一个大项目的时候,你想打开所有的Warning,但是打开后发现一堆公共库文件都出现了warning报错.此时如果你想忽略公共库头文件中的warning报错,只需要在编译的时候,将公共库头文件的 ...
- JAVA之Lamdba表达式使用摘要
1. of (of方法其生成的Stream是有限长度的,Stream的长度为其内的元素个数) Stream<Integer> integerStream = Stream.of(1, ...
- Linux深入理解Socket异常
在各种网络异常情况的背后,TCP是怎么处理的?又是怎样把处理结果反馈给上层应用的?本文就来讨论这个问题.分为两个场景来讨论 建立连接时的异常情况 1 正常情况下 经过三次握手,客户端连接成功,服务端有 ...
- ajax请求中的6个全局事件
//事件触发顺序ajaxStart,ajaxSend,ajaxSuccess或ajaxError,ajaxComplete,ajaxStop $(document).ajaxStart(functio ...
- Xbox One手柄 + Xbox Wireless Adapter PC无线适配器驱动安装、配对全流程
以下步骤在Windows 7系统中操作.XBox One手柄+无线适配器并非仅只能在Windows 10中使用. 一点感想:微软的XBoxOne手柄实在是好东西,但产品使用说明与文档实在太垃圾,翻遍官 ...
- linux每日命令(2):cd命令
1.命令格式: cd [目录名] 2.命令功能 切换当前目录至 [目录名] 3. 常用范例 1.进入系统根目录 命令: cd / 说明:进入系统根目录,上面命令执行完后拿ls命令看一下,当前目录已经到 ...
- python修饰器(装饰器)以及wraps
Python装饰器(decorator)是在程序开发中经常使用到的功能,合理使用装饰器,能让我们的程序如虎添翼. 装饰器的引入 初期及问题的诞生 假如现在在一个公司,有A B C三个业务部门,还有S一 ...