bufio

  • bufio包实现了带缓冲区的读写,是对文件读写的封装
  • bufio缓冲写数据
模式 含义
os.O_WRONLY 只写
os.O_CREATE 创建文件
os.O_RDONLY 只读
os.O_RDWR 读写
os.O_TRUNC 清空
os.O_APPEND 追加
  • bufio读、写数据
func main() {
//wr()
re()
}
func re() {
// 读文件用os.Open
file, err := os.Open("./t01.txt")
if err != nil {
fmt.Println(err.Error())
return
}
defer file.Close()
// 获取reader对象
reader := bufio.NewReader(file)
for {
line, _, err := reader.ReadLine()
if err == io.EOF {
break
}
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(string(line))
}
}
func wr() {
// 写文件用os.OpenFile
file, err := os.OpenFile("t01.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println(err.Error())
return
}
defer file.Close()
// 获取Writer对象
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString(fmt.Sprintf("hello %d\n", i))
}
// 刷新缓冲区,强制写出
writer.Flush()
}

ioutil工具包

  • 工具包写文件
  • 工具包读取文件
func main() {
//wr()
re()
}
func wr() {
if err := ioutil.WriteFile("./t02.txt", []byte("哈哈哈哈\n"), 0644); err != nil {
fmt.Println(err.Error())
return
}
}
func re() {
data, err := ioutil.ReadFile("./t02.txt")
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(string(data))
}

例子:实现一个Cat命令

使用文件操作相关知识,模拟实现linux平台cat命令的功能。

func main() {
flag.Parse() // 解析命令行参数
if flag.NArg() == 0 {
// 如果没有参数,默认从标准输入读取内容
reader := bufio.NewReader(os.Stdin)
cat(reader)
}
// 依次读取每个指定文件的内容,并打印到终端
for i := 0; i < flag.NArg(); i++ {
file, err := os.Open(flag.Arg(i))
if err != nil {
fmt.Fprintf(os.Stdout, "reading from %s failed, err: %v \n", flag.Arg(i), err)
continue
}
cat(bufio.NewReader(file))
}
} // cat 命令实现
func cat (r *bufio.Reader) {
for {
buf, err := r.ReadBytes('\n') // 注意是字符
if err == io.EOF {
break
}
fmt.Fprintf(os.Stdout, "%s", buf)
}
}

最新文章

  1. MVC常遇见的几个场景代码分享
  2. jquery追加内容
  3. jquery触屏幻灯片
  4. MVC+EF 自定义唯一性验证
  5. ggplot2颜色操作
  6. 动手学习TCP: 环境搭建
  7. the basic index concept
  8. mysql -prompt选项
  9. erlang代码片段
  10. attitude
  11. 快速记忆JavaScript中exec和match的使用
  12. 如何改变c盘的访问权限
  13. RStudio版本号管理 整合Git
  14. webstorm-快捷键大全
  15. Hive使用必知必会系列
  16. SQL Challenges
  17. 学习笔记《Java多线程编程实战指南》四
  18. Confluence 6 通过 SSL 或 HTTPS 运行
  19. JS 函数表达式
  20. python爬虫入门---第二篇:获取2019年中国大学排名

热门文章

  1. 【LeetCode】160. Intersection of Two Linked Lists 解题报告(Python)
  2. GCD(hdu1695)
  3. Lightoj1011 - Marriage Ceremonies
  4. POJ 3278:The merchant(LCA&amp;DP)
  5. Codeforces 1073C:Vasya and Robot(二分)
  6. Crypto CTF 2019 writeup
  7. Dimension reduction in principal component analysis for trees
  8. Null和空值对于avg计算时产生的影响以及处理
  9. MacOS使用IDEA+Maven+Scala+Spark进行本地调试
  10. [opencv]zxing c++ 库的编译,安装,以及api的介绍