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

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

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

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

常用的文件操作和函数:

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. GO基础之流程控制语句

    一.if分支语句 if 布尔表达式 1 { /* 在布尔表达式 1 为 true 时执行 */ } ; a% == { fmt.Println("偶数") } if 布尔表达式 1 ...

  2. 4. SOFAJRaft源码分析— RheaKV初始化做了什么?

    前言 由于RheaKV要讲起来篇幅比较长,所以这里分成几个章节来讲,这一章讲一讲RheaKV初始化做了什么? 我们先来给个例子,我们从例子来讲: public static void main(fin ...

  3. 代码传奇 | 身价10亿的程序员 雷军当年也为他打工——WPS之父 求伯君

    他的前半生,值得我们每一个人深思. 在普通人眼里,他寂寂无名,只有年岁稍长的文化人,才听说过他传奇般的存在. 在IT人眼里,他是块活化石,中国第一的大旗除了他,没人敢抗! 他是求伯君,从一个浙江穷山村 ...

  4. spring boot mybatis多多数据源解决方法

    在我们的项目中不免会遇到需要在一个项目中使用多个数据源的问题,像我在得到一个任务将用户的聊天记录进行迁移的时候,就是用到了三个数据源,当时使用的AOP的编程方式根据访问的方法的不同进行动态的切换数据源 ...

  5. Redis(六)复制

    在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求.Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本.复制功能是高可用R ...

  6. text文本样式二

    text-transform样式用于将元素的字母全都变成大小 letter-spacing设置字符之间的间距 <html> <head> <style type=&quo ...

  7. SpringBoot与MybatisPlus3.X整合示例(十六)

    包含 分页.逻辑删除.自定义全局操作 等绝大部分常用功能的使用示例,相当于大整合的完整示例 pom.xml <dependencies> <dependency> <gr ...

  8. docker安装sshd

    基础镜像: ubuntu:14.04 启动并安装sshd //启动 docker run -it ubuntu:14.04 /bin/bash //更新apt-get apt-get update / ...

  9. MySQL学习之路(1):SQL脚本语言

    使用MySQL数据库,首先安装MySQL数据库,本文所有SQL脚本在MySQL上测试和执行. 安装Mysql服务器:安装Mysql workbench客户端,可以以图形化界面管理mysql:安装php ...

  10. android 9.0 Launcher3 去掉抽屉式,显示所有 app

    效果图 修改思路 1.增加全局控制变量 sys.launcher3.is_full_app,用来动态切换 2.增加两套布局,对应有抽屉和无抽屉 3.去除 allAppsButton 4.将 AllAp ...