1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. //打开文件
  8. //概念说明: file 的叫法
  9. //1. file 叫 file对象
  10. //2. file 叫 file指针
  11. //3. file 叫 file 文件句柄
  12. file , err := os.Open("d:/test.txt")
  13. if err != nil {
  14. fmt.Println("open file err=", err)
  15. }
  16. //输出下文件,看看文件是什么, 看出file 就是一个指针 *File
  17. fmt.Printf("file=%v", file)
  18. //关闭文件
  19. err = file.Close()
  20. if err != nil {
  21. fmt.Println("close file err=", err)
  22. }
  23. }

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "bufio"
  6. "io"
  7. )
  8. func main() {
  9. //打开文件
  10. //概念说明: file 的叫法
  11. //1. file 叫 file对象
  12. //2. file 叫 file指针
  13. //3. file 叫 file 文件句柄
  14. file , err := os.Open("d:/test.txt")
  15. if err != nil {
  16. fmt.Println("open file err=", err)
  17. }
  18.  
  19. //当函数退出时,要及时的关闭file
  20. defer file.Close() //要及时关闭file句柄,否则会有内存泄漏.
  21.  
  22. // 创建一个 *Reader ,是带缓冲的
  23. /*
  24. const (
  25. defaultBufSize = 4096 //默认的缓冲区为4096
  26. )
  27. */
  28. reader := bufio.NewReader(file)
  29. //循环的读取文件的内容
  30. for {
  31. str, err := reader.ReadString('\n') // 读到一个换行就结束
  32. if err == io.EOF { // io.EOF表示文件的末尾
  33. break
  34. }
  35. //输出内容
  36. fmt.Printf(str)
  37. }
  38.  
  39. fmt.Println("文件读取结束...")
  40. }

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. )
  6. func main() {
  7.  
  8. //使用ioutil.ReadFile一次性将文件读取到位
  9. file := "d:/test.txt"
  10. content, err := ioutil.ReadFile(file)
  11. if err != nil {
  12. fmt.Printf("read file err=%v", err)
  13. }
  14. //把读取到的内容显示到终端
  15. //fmt.Printf("%v", content) // []byte
  16. fmt.Printf("%v", string(content)) // []byte
  17.  
  18. //我们没有显式的Open文件,因此也不需要显式的Close文件
  19. //因为,文件的Open和Close被封装到 ReadFile 函数内部
  20. }

  

  1. package main
  2. import (
  3. "fmt"
  4. "bufio"
  5. "os"
  6. )
  7. func main() {
  8. //创建一个新文件,写入内容 5句 "hello, Gardon"
  9. //1 .打开文件 d:/abc.txt
  10. filePath := "d:/abc.txt"
  11. file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)
  12. if err != nil {
  13. fmt.Printf("open file err=%v\n", err)
  14. return
  15. }
  16. //及时关闭file句柄
  17. defer file.Close()
  18. //准备写入5句 "hello, Gardon"
  19. str := "hello,Gardon\r\n" // \r\n 表示换行
  20. //写入时,使用带缓存的 *Writer
  21. writer := bufio.NewWriter(file)
  22. for i := 0; i < 5; i++ {
  23. writer.WriteString(str)
  24. }
  25. //因为writer是带缓存,因此在调用WriterString方法时,其实
  26. //内容是先写入到缓存的,所以需要调用Flush方法,将缓冲的数据
  27. //真正写入到文件中, 否则文件中会没有数据!!!
  28. writer.Flush()
  29. }

  

  1. file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_TRUNC, 0666)
  1. package main
  2. import (
  3. "fmt"
  4. "bufio"
  5. "os"
  6. )
  7.  
  8. func main() {
  9. //打开一个存在的文件中,将原来的内容覆盖成新的内容10句 "你好,尚硅谷!"
  10.  
  11. //创建一个新文件,写入内容 5句 "hello, Gardon"
  12. //1 .打开文件已经存在文件, d:/abc.txt
  13. filePath := "d:/abc.txt"
  14. file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_TRUNC, )
  15. if err != nil {
  16. fmt.Printf("open file err=%v\n", err)
  17. return
  18. }
  19. //及时关闭file句柄
  20. defer file.Close()
  21. //准备写入5句 "你好,尚硅谷!"
  22. str := "你好,尚硅谷!\r\n" // \r\n 表示换行
  23. //写入时,使用带缓存的 *Writer
  24. writer := bufio.NewWriter(file)
  25. for i := ; i < ; i++ {
  26. writer.WriteString(str)
  27. }
  28. //因为writer是带缓存,因此在调用WriterString方法时,其实
  29. //内容是先写入到缓存的,所以需要调用Flush方法,将缓冲的数据
  30. //真正写入到文件中, 否则文件中会没有数据!!!
  31. writer.Flush()
  32.  
  33. }

  1. file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, 0666)
  1. package main
  2. import (
  3. "fmt"
  4. "bufio"
  5. "os"
  6. )
  7.  
  8. func main() {
  9.  
  10. //打开一个存在的文件,在原来的内容追加内容 'ABC! ENGLISH!'
  11. //1 .打开文件已经存在文件, d:/abc.txt
  12. filePath := "d:/abc.txt"
  13. file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, )
  14. if err != nil {
  15. fmt.Printf("open file err=%v\n", err)
  16. return
  17. }
  18. //及时关闭file句柄
  19. defer file.Close()
  20. //准备写入5句 "你好,尚硅谷!"
  21. str := "ABC,ENGLISH!\r\n" // \r\n 表示换行
  22. //写入时,使用带缓存的 *Writer
  23. writer := bufio.NewWriter(file)
  24. for i := ; i < ; i++ {
  25. writer.WriteString(str)
  26. }
  27. //因为writer是带缓存,因此在调用WriterString方法时,其实
  28. //内容是先写入到缓存的,所以需要调用Flush方法,将缓冲的数据
  29. //真正写入到文件中, 否则文件中会没有数据!!!
  30. writer.Flush()
  31.  
  32. }

  1. package main
  2. import (
  3. "fmt"
  4. "bufio"
  5. "os"
  6. "io"
  7. )
  8.  
  9. func main() {
  10.  
  11. //打开一个存在的文件,将原来的内容读出显示在终端,并且追加5句"hello,北京!"
  12. //1 .打开文件已经存在文件, d:/abc.txt
  13. filePath := "d:/abc.txt"
  14. file, err := os.OpenFile(filePath, os.O_RDWR | os.O_APPEND, )
  15. if err != nil {
  16. fmt.Printf("open file err=%v\n", err)
  17. return
  18. }
  19. //及时关闭file句柄
  20. defer file.Close()
  21.  
  22. //先读取原来文件的内容,并显示在终端.
  23. reader := bufio.NewReader(file)
  24. for {
  25. str, err := reader.ReadString('\n')
  26. if err == io.EOF { //如果读取到文件的末尾
  27. break
  28. }
  29. //显示到终端
  30. fmt.Print(str)
  31. }
  32.  
  33. //准备写入5句 "你好,尚硅谷!"
  34. str := "hello,北京!\r\n" // \r\n 表示换行
  35. //写入时,使用带缓存的 *Writer
  36. writer := bufio.NewWriter(file)
  37. for i := ; i < ; i++ {
  38. writer.WriteString(str)
  39. }
  40. //因为writer是带缓存,因此在调用WriterString方法时,其实
  41. //内容是先写入到缓存的,所以需要调用Flush方法,将缓冲的数据
  42. //真正写入到文件中, 否则文件中会没有数据!!!
  43. writer.Flush()
  44.  
  45. }

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. )
  6. func main() {
  7. //将d:/abc.txt 文件内容导入到 e:/kkk.txt
  8. //1. 首先将 d:/abc.txt 内容读取到内存
  9. //2. 将读取到的内容写入 e:/kkk.txt
  10. file1Path := "d:/abc.txt"
  11. file2Path := "e:/kkk.txt"
  12. data, err := ioutil.ReadFile(file1Path)
  13. if err != nil {
  14. //说明读取文件有错误
  15. fmt.Printf("read file err=%v\n", err)
  16. return
  17. }
  18. err = ioutil.WriteFile(file2Path, data, )
  19. if err != nil {
  20. fmt.Printf("write file error=%v\n", err)
  21. }
  22. }

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "io"
  6. "bufio"
  7. )
  8.  
  9. //自己编写一个函数,接收两个文件路径 srcFileName dstFileName
  10. func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {
  11.  
  12. srcFile, err := os.Open(srcFileName)
  13. if err != nil {
  14. fmt.Printf("open file err=%v\n", err)
  15. }
  16. defer srcFile.Close()
  17. //通过srcfile ,获取到 Reader
  18. reader := bufio.NewReader(srcFile)
  19.  
  20. //打开dstFileName
  21. dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY | os.O_CREATE, )
  22. if err != nil {
  23. fmt.Printf("open file err=%v\n", err)
  24. return
  25. }
  26.  
  27. //通过dstFile, 获取到 Writer
  28. writer := bufio.NewWriter(dstFile)
  29. defer dstFile.Close()
  30.  
  31. return io.Copy(writer, reader)
  32.  
  33. }
  34.  
  35. func main() {
  36.  
  37. //将d:/flower.jpg 文件拷贝到 e:/abc.jpg
  38.  
  39. //调用CopyFile 完成文件拷贝
  40. srcFile := "d:/flower.jpg"
  41. dstFile := "e:/abc.jpg"
  42. _, err := CopyFile(dstFile, srcFile)
  43. if err == nil {
  44. fmt.Printf("拷贝完成\n")
  45. } else {
  46. fmt.Printf("拷贝错误 err=%v\n", err)
  47. }
  48.  
  49. }

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "io"
  6. "bufio"
  7. )
  8.  
  9. //定义一个结构体,用于保存统计结果
  10. type CharCount struct {
  11. ChCount int // 记录英文个数
  12. NumCount int // 记录数字的个数
  13. SpaceCount int // 记录空格的个数
  14. OtherCount int // 记录其它字符的个数
  15. }
  16.  
  17. func main() {
  18.  
  19. //思路: 打开一个文件, 创一个Reader
  20. //每读取一行,就去统计该行有多少个 英文、数字、空格和其他字符
  21. //然后将结果保存到一个结构体
  22. fileName := "e:/abc.txt"
  23. file, err := os.Open(fileName)
  24. if err != nil {
  25. fmt.Printf("open file err=%v\n", err)
  26. return
  27. }
  28. defer file.Close()
  29. //定义个CharCount 实例
  30. var count CharCount
  31. //创建一个Reader
  32. reader := bufio.NewReader(file)
  33.  
  34. //开始循环的读取fileName的内容
  35. for {
  36. str, err := reader.ReadString('\n')
  37. if err == io.EOF { //读到文件末尾就退出
  38. break
  39. }
  40. //遍历 str ,进行统计
  41. for _, v := range str {
  42.  
  43. switch {
  44. case v >= 'a' && v <= 'z':
  45. fallthrough //穿透
  46. case v >= 'A' && v <= 'Z':
  47. count.ChCount++
  48. case v == ' ' || v == '\t':
  49. count.SpaceCount++
  50. case v >= '' && v <= '':
  51. count.NumCount++
  52. default :
  53. count.OtherCount++
  54. }
  55. }
  56. }
  57.  
  58. //输出统计的结果看看是否正确
  59. fmt.Printf("字符的个数为=%v 数字的个数为=%v 空格的个数为=%v 其它字符个数=%v",
  60. count.ChCount, count.NumCount, count.SpaceCount, count.OtherCount)
  61.  
  62. }

  1. package main
  2.  
  3. import (
  4. "bytes"
  5. "os"
  6. )
  7.  
  8. func main(){
  9. var myname bytes.Buffer
  10. myname.Write([]byte("sunlong"))
  11. myname.WriteTo(os.Stdout)
  12. }
  13.  
  14. ...
  15. sunlong
  16. Process finished with exit code
  17. ...

缓冲区,只有当内存达到一定数量后才会写入

go 文件操作 io的更多相关文章

  1. 文件操作IO流

    fopen 打开文件或者生成文件 getc 向文件中读取一个字符 putc 向文件中写入一个字符 fgets 向文件中读取字符串 参数可以设置获取多少个字符串 fputs 向文件中写入字符串 不自动添 ...

  2. python文件操作IO

    模式 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式.一般用于非文本文件如图片等. r+ ...

  3. java中io对文件操作的简单介绍

    11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...

  4. 【java】文件操作java.io.File

    package 文件操作; import java.io.File; import java.io.IOException; public class TestFile { public static ...

  5. Linux下普通IO文件操作函数---C语言

    普通文件IO总结 FILE结构体    typedef struct   {       int level; /*填充/清空一级缓存*/     unsigned flag; /*文件状态指针*/ ...

  6. Python文件基础操作(IO入门1)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6422270.html 本文出自:[Edwin博客园] Python文件基础操作(IO入门1) 1. pyth ...

  7. Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录

    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator // ...

  8. 使用Apache IO库操作IO与文件

    --------------siwuxie095                         首先到 Apache官网 下载相关的库文件     Apache官网:http://www.apach ...

  9. Atitit.跨语言  文件夹与文件的io操作集合  草案

    Atitit.跨语言  文件夹与文件的io操作集合  草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...

随机推荐

  1. Django项目: 3.用户注册功能

    本章内容的补充知识点 导入库的良好顺序: 1.系统库 2.django库 3.自己定义的库(第三方库) redis缓存数据库的数据调用速度快,但是不利于长时间保存. mysql用于长时间存储,但是调用 ...

  2. 在scrapy中过滤重复的数据

    当为了确保爬到的数据中没有重复的数据的时候,可以实现一个去重的item pipeline 增加构造器方法,在其中初始化用于对与书名的去重的集合 在process_item方法中,先取出item中要判断 ...

  3. java笔试之字符串反转

    写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串. package test; import java.util.Scanner; public class exam04 { public ...

  4. yii2下使用支付宝

    最近入坑了yii2 感觉是个很强大的框架.使用yii做支付宝的移动支付的时候出了点问题,记录下来避免以后忘记了. 使用的是支付宝立即到账的功能,网上很多集成好的接口我就不重复了,找不到的话github ...

  5. spark编程入门-idea环境搭建

    原文引自:http://blog.csdn.net/huanbia/article/details/69084895 1.环境准备 idea采用2017.3.1版本. 创建一个文件a.txt 2.构建 ...

  6. python的functools.partial的应用

    functools.partial是类似于创造“可移动”函数的意思,参数的第一个是函数名,其他的是这个函数其他参数,例如: generator_func = functools.partial( tf ...

  7. 把char[]数组里面的内容用MessageBox显示出来

    const char *q; q = mysql_get_client_info();  //获得一字符串指针 CString p(q); AfxMessageBox(p);

  8. LA3902 Networlk

    Network Consider a tree network with n nodes where the internal nodes correspond to servers and the ...

  9. CentOS 6.5之zabbix2.2的简单部署

    Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.(目前,官方长期维护的稳定版本有2.2和3.0) 其他常见的监控工具还有: (1)Cacti:Cacti是一 ...

  10. 20190828 [ Night ] - 弋

    半集训可还行…… 半集训第一次模拟 考试过程 好像是上回的同套题. ××内个$\text{english}$真毒瘤 T1 什么玩意? $chinese$? 前面两句背景是个? 需要$\Theta(1) ...