读文件:

package main

import (
"fmt"
"io/ioutil"
) func main() {
b, err := ioutil.ReadFile("test.log")
if err != nil {
fmt.Print(err)
}
fmt.Println(b)
str := string(b)
fmt.Println(str)
}

写文件:

package main

import (
"io/ioutil"
) func check(e error) {
if e != nil {
panic(e)
}
} func main() { d1 := []byte("hello\ngo\n")
err := ioutil.WriteFile("test.txt", d1, 0644)
check(err)
}

使用os进行读写文件

同样,先回忆下之前的os包的介绍: 
Go语言学习之os包中文件相关的操作(The way to go)

首先要注意的就是两个打开文件的方法: 
func Open

func Open(name string) (*File, error)

Open opens the named file for reading. If successful, methods on the returned file can be used for reading; the associated file descriptor has mode O_RDONLY. If there is an error, it will be of type *PathError.

读文件:

fi, err := os.Open(path)
if err != nil {
panic(err)
}
defer fi.Close()

func OpenFile 
需要提供文件路径、打开模式、文件权限

func OpenFile(name string, flag int, perm FileMode) (*File, error)

OpenFile is the generalized open call; most users will use Open or Create instead. It opens the named file with specified flag (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful, methods on the returned File can be used for I/O. If there is an error, it will be of type *PathError.

读文件:

package main

import (
"log"
"os"
) func main() {
f, err := os.OpenFile("notes.txt", os.O_RDWR|os.O_CREATE, 0755)
if err != nil {
log.Fatal(err)
}
if err := f.Close(); err != nil {
log.Fatal(err)
}
}

读方法

package main

import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
) func check(e error) {
if e != nil {
panic(e)
}
} func main() { f, err := os.Open("/tmp/dat")
check(err) b1 := make([]byte, 5)
n1, err := f.Read(b1)
check(err)
fmt.Printf("%d bytes: %s\n", n1, string(b1)) o2, err := f.Seek(6, 0)
check(err)
b2 := make([]byte, 2)
n2, err := f.Read(b2)
check(err)
fmt.Printf("%d bytes @ %d: %s\n", n2, o2, string(b2)) o3, err := f.Seek(6, 0)
check(err)
b3 := make([]byte, 2)
n3, err := io.ReadAtLeast(f, b3, 2)
check(err)
fmt.Printf("%d bytes @ %d: %s\n", n3, o3, string(b3)) _, err = f.Seek(0, 0)
check(err) r4 := bufio.NewReader(f)
b4, err := r4.Peek(5)
check(err)
fmt.Printf("5 bytes: %s\n", string(b4)) f.Close() }

写方法

package main

import (
"bufio"
"fmt"
"io/ioutil"
"os"
) func check(e error) {
if e != nil {
panic(e)
}
} func main() { f, err := os.Create("/tmp/dat2")
check(err) defer f.Close() d2 := []byte{115, 111, 109, 101, 10}
n2, err := f.Write(d2)
check(err)
fmt.Printf("wrote %d bytes\n", n2) n3, err := f.WriteString("writes\n")
fmt.Printf("wrote %d bytes\n", n3) f.Sync() w := bufio.NewWriter(f)
n4, err := w.WriteString("buffered\n")
fmt.Printf("wrote %d bytes\n", n4) w.Flush() }

几种读取文件方法速度比较

package main

import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
"time"
) func read0(path string) string {
f, err := ioutil.ReadFile(path)
if err != nil {
fmt.Printf("%s\n", err)
panic(err)
}
return string(f)
} func read1(path string) string {
fi, err := os.Open(path)
if err != nil {
panic(err)
}
defer fi.Close() chunks := make([]byte, 1024, 1024)
buf := make([]byte, 1024)
for {
n, err := fi.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if 0 == n {
break
}
chunks = append(chunks, buf[:n]...)
}
return string(chunks)
} func read2(path string) string {
fi, err := os.Open(path)
if err != nil {
panic(err)
}
defer fi.Close()
r := bufio.NewReader(fi) chunks := make([]byte, 1024, 1024) buf := make([]byte, 1024)
for {
n, err := r.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if 0 == n {
break
}
chunks = append(chunks, buf[:n]...)
}
return string(chunks)
} func read3(path string) string {
fi, err := os.Open(path)
if err != nil {
panic(err)
}
defer fi.Close()
fd, err := ioutil.ReadAll(fi)
return string(fd)
} func main() { file := "test.log" start := time.Now() read0(file)
t0 := time.Now()
fmt.Printf("Cost time %v\n", t0.Sub(start)) read1(file)
t1 := time.Now()
fmt.Printf("Cost time %v\n", t1.Sub(t0)) read2(file)
t2 := time.Now()
fmt.Printf("Cost time %v\n", t2.Sub(t1)) read3(file)
t3 := time.Now()
fmt.Printf("Cost time %v\n", t3.Sub(t2)) }

运行结果: 
Cost time 4.0105ms 
Cost time 11.5043ms 
Cost time 7.0042ms 
Cost time 2.4983ms

Cost time 4.4925ms 
Cost time 11.0053ms 
Cost time 5.0082ms 
Cost time 2.9992ms

Cost time 3.9866ms 
Cost time 15.0085ms 
Cost time 7.5054ms 
Cost time 2.5035ms

Cost time 4.9989ms 
Cost time 14.0112ms 
Cost time 7.5045ms 
Cost time 3.508ms

Cost time 3.0043ms 
Cost time 15.0265ms 
Cost time 8.9884ms 
Cost time 2.0036ms

最新文章

  1. python1
  2. webbench之使用(二)
  3. JavaScript中数组操作常用方法
  4. (转)linux grep 正则表达式
  5. Microsoft Excel软件打开文件出现文件的格式与文件扩展名指定格式不一致?
  6. 安装 zsh 、 on-my-zsh 和 autojump
  7. 如何做一个脚本自动打开IE浏览器
  8. java基础-在dos控制台编写简易的java程序
  9. Android 框架修炼-自己封装双缓存管理框架库
  10. linux下查看本机socket端口详细信息
  11. IOS 获取网络图像尺寸 更改 图像色彩值 什么一套方法灰色
  12. nodejs,http,get,post,请求
  13. net start mongodb 服务名无效解决方案
  14. 让 Homebrew 走代理更新 + brew 管理 node 版本
  15. 8.24 关于valid.js
  16. JMeter—逻辑控制器(六)
  17. Orangegreenworks封装rpgmakermv
  18. 登陆 全站 user
  19. golang "text/template" 模板语法简明教程
  20. Linux通配符与基础正则表达式、扩展正则表达式

热门文章

  1. CNN 笔记
  2. JavaScript随机验证码
  3. SpringBoot 中aop整合方法执行日志
  4. @media screen媒体查询实现页面自适应布局
  5. 转载一篇让你全面了解什么是.NET。
  6. python 修改、读取图片元数据
  7. 最简单的SAP云平台开发教程 - 如何开发UI5应用并运行在SAP云平台上
  8. 10.Spring整合Hibernate_3_HibernateTemplate
  9. [转载] 关于CI,CD,jenkins
  10. 高级IO——文件锁