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

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

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

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

常用的文件操作和函数:

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. Python的Argparse模块是什么?

            近日在阅读代码的过程中遇到了Argparse模块,记得前段时间已经看了,可是过了两周现在又忘了, 看来写代码一定要钻研到底搞清楚其中原委才行,本文主要参考Python3.6系列官方文档 ...

  2. 解决html连续字符或数字换行的问题

    word-break: break-all; word-wrap:break-word; 强制换行

  3. Redis启动报错解决

    报错 redis_6379.service - LSB: start and stop redis_6379    Loaded: loaded (/etc/rc.d/init.d/redis_637 ...

  4. Java socket Tcp协议 实现文件传输

    1.文件加密上传后发现文件已损坏: 原因:使用 read(byte[]) 方法不能够准确的获取到正确的字节数,有可能比 byte[].length 小,所以在解密的时候出现错误. 解决办法: 判断读取 ...

  5. Springboot 系列(十五)如何编写自己的 Springboot starter

    1. 前言 Springboot 中的自动配置确实方便,减少了我们开发上的复杂性,那么自动配置原理是什么呢?之前我也写过了一篇文章进行了分析. Springboot 系列(三)Spring Boot ...

  6. 获取gps信息

    (一)plist修改 添加如下变量 (二)新建视图用来启动Gps 此视图控制器继承CLLocationManagerDelegate #import <UIKit/UIKit.h> #im ...

  7. DirectX9:第一章 初始化Direct3D

    一.Direct3D概述 Direct3D是一套底层图形API,可以被视为应用程序与图形设备交互的中介. 应用程序.Direct3D以及硬件之间的交互关系: 在Direct3D和图形设备之间有一个环节 ...

  8. 学习笔记45_log4net日志

    1.配置添加一个App.config *对于网站,就使用web.config ***对于App.config和web.config的配置,在表现形式上是不一致的,使用的时候应该在网上查对于的配置设置. ...

  9. 来探讨一下最近面试问的ThreadLocal问题

    中高级阶段开发者出去面试,应该躲不开ThreadLocal相关问题,本文就常见问题做出一些解答,欢迎留言探讨. ThreadLocal为java并发提供了一个新的思路, 它用来存储Thread的局部变 ...

  10. VirtualBox6安装CentOS7设置静态IP

    安装virtualbox后安装centos7, 这里就不在赘述了, 网上有很多教程 先关闭虚拟机, 按照如下设置配置网络 这里需要使用双网卡, 我们在开启第二个网卡, 如下所示 之后开启虚拟机, 进行 ...