文件程序中是以流的形式操作的。

流:数据在数据源(文件)和程序(内存)之间经历的路径;

输入流:数据从数据源到程序的路径;

输出流:数据从程序到数据源的路径;

常用的文件操作和函数:

1.常用的文件操作函数和方法(打开和关闭文件)

2.读取文件中的内容,并显示给终端(带缓冲区的方式),使用os.Open(),file.Close(),bufio.NewReader(),reader.ReadString()

3.读取文件并显示在终端(使用Ioutil一次将整个文件读入到内存中) ,这种方式适用于文件不太大情况下,相关方法ioutil.ReadFile

4.写文件

(1)创建一个新文件夹,并写入hello world;

(2)打开一个存在的文件,并将内容覆盖为新的;

(3)打开一个存在的文件,并在末尾追加新内容;

(4)打开一个存在的文件,将原来的内容读出并显示在终端,并且追加新内容;

package main

import (
"bufio"
"fmt"
"io"
"os"
) func main() {
filepath := "test.txt"
//主要是参数的区别
file, err := os.OpenFile(filepath, os.O_RDWR|os.O_APPEND, )
if err != nil {
fmt.Println("open file error=\n", err)
} defer file.Close() reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
fmt.Println(str)
} str := "hello world\n"
writer := bufio.NewWriter(file)
for i := ; i < ; i++ {
writer.WriteString(str)
}
//因为writer是带缓存的,因此在调用WriteString的时候是先将数据存入到缓存的
//因此真正写入到文件中是要用Flush方法,否则文件中会没有数据
writer.Flush()
}

5.读取一个文件中的内容写到另一个文件中

6.判断文件或目录是否存在

说明:如果文件夹存在,则返回true,nil;如果文件夹不存在,则返回false,nil;如果返回false,err,则说明是其它错误。

7.将一个目录下的图片拷贝到另一个目录下

package main

import (
"bufio"
"fmt"
"io"
"os"
) func copyFile(dstFileName string, srcFileName string) (written int64, err error) {
srcfile, err := os.Open(srcFileName)
if err != nil {
fmt.Println("open file error=", err)
}
defer srcfile.Close()
reader := bufio.NewReader(srcfile) dstfile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, )
if err != nil {
fmt.Println("open file error=", err)
}
defer dstfile.Close()
writer := bufio.NewWriter(dstfile)
return io.Copy(writer, reader)
}
func main() {
file1path := "D:/dlrb.jpg"
file2path := "E:/dlrb.jpg"
_, err := copyFile(file2path, file1path)
if err == nil {
fmt.Println("拷贝完成")
} else {
fmt.Println("拷贝失败 error=", err)
} }

8.统计文件里面的不同种类字符的个数

func main() {
file1path := "test1.txt"
srcfile, err := os.Open(file1path)
if err != nil {
fmt.Println("open file error=", err)
return
}
defer srcfile.Close()
var count charCount
reader := bufio.NewReader(srcfile)
for {
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
for _, v := range str {
fmt.Println(string(v))
switch {
case v >= 'a' && v <= 'z':
fallthrough
case v >= 'A' && v <= 'z':
count.chCount++
case v == ' ' || v == '\t':
count.spaceCount++
case v >= '' && v <= '':
count.numCount++
default:
count.otherCount++
}
}
} fmt.Printf("字符个数:%v,数字个数:%v,空格个数:%v,其它个数:%v",
count.chCount, count.numCount, count.spaceCount, count.otherCount)
}

(三十六)golang--文件的基本操作的更多相关文章

  1. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  2. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  4. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  5. 风炫安全web安全学习第三十六节课-15种上传漏洞讲解(一)

    风炫安全web安全学习第三十六节课 15种上传漏洞讲解(一) 文件上传漏洞 0x01 漏洞描述和原理 文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把 ...

  6. [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)

    [系统安全] 十六.PE文件逆向基础知识(PE解析.PE编辑工具和PE修改) 文章来源:https://masterxsec.github.io/2017/05/02/PE%E6%96%87%E4%B ...

  7. Java进阶(三十六)深入理解Java的接口和抽象类

    Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...

  8. 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...

  9. “全栈2019”Java第三十六章:类

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. 微信小程序把玩(三十六)Storage API

    原文:微信小程序把玩(三十六)Storage API 其实这个存储在新建Demo的时候就已经用到了就是存储就是那个logs日志,数据存储主要分为同步和异步 异步存储方法: 存数据 wx.setStor ...

随机推荐

  1. 使用 pdf.js 在网页中加载 pdf 文件

    在网页中加载并显示PDF文件是最常见的业务需求.例如以下应用场景:(1)在电商网站上购物之后,下载电子发票之前先预览发票.(2)电子商务管理系统中查看发布的公文,公文文件一般是PDF格式的文件. 目前 ...

  2. MySQL操作(一)用户及权限

    一.mysql 里的所有用户都是存储在数据库mysql的user表里 二.创建普通用户.赋权.撤销权限 的操作 1.创建用户(需要先用root进去mysql)格式:create  user  '用户名 ...

  3. java Int数据工具类

    1.在使用tcp协议传输数据时,使用到的 Int 数据的工具类方法 //将 Int 数据转换成字节数组 public static byte[] intToByteArray(int data){ b ...

  4. Java基础(39)Arrays.binarySearch方法

    1.源码中可以看到,binarySearch方法调用了binarySearch0方法,binarySearch0方法才是标准的二分查找实现. 2.对于binarySearch0方法来说,注意最后的re ...

  5. django-模板之for标签(十)

  6. Swift3 Xcode8 Ios10 开发笔记

    设置不同subView的层次: //将subView挪到最上边 self.view.bringSubviewToFront(subView) //将subView挪到最下边 self.view.sen ...

  7. shell 脚本中的注释详解

    上次写了shell脚本的注释,没想到那么多人的需要,也存在不少不足.这次做个补充吧. 单行注释: 单行注释就比较简单了,直接在行最前端加上符号 # 即可.具体用法如下所示: # this is com ...

  8. H5 + WebGL 实现的地铁站 3D 可视化系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  9. NPOI 导出 excel 性能测试

    NPOI 导出 excel 性能测试 Intro 网上看到很多人说 NPOI 的性能不行,自己写了一个 NPOI 的扩展库,于是想尝试看看 NPOI 的性能究竟怎么样,道听途说始终不如自己动手一试. ...

  10. 【XSY2564】sequence

    Description [题目描述] 给定一个长度为n的由['0'..'9']组成的字符串s,v[i,j]表示由字符串s第i到第j位组成的十进制数字. 将它的某一个上升序列定义为:将这个字符串切割成m ...