首页 > 其他分享 >golang中io的使用

golang中io的使用

时间:2022-11-20 22:13:34浏览次数:49  
标签:文件 读取 fmt 使用 golang io error main os

一、读取小文件:ioutil.ReadFile()

读取文件的内容并显示在终端(使用ioutil一次将文件读取到内存中),这种方式适用于读取小文件:

package main
import (
    "fmt"
    "io/ioutil"
)

func main(){
    content, error := ioutil.ReadFile("E:/a.txt")
    if error != nil{
        fmt.Println("读取出错,错误为:", error)
    }

    fmt.Printf("%v", string(content))
}

二、读取文件的内容并显示在终端(带缓存区的方式-4096字节)

适合读取比较大的文件,使用os.Open(),os.Close(),bufio.NewReader(),reader.ReadString()函数和方法:

package main
import (
    "fmt"
    "os"
    "bufio"
    "io"
)

func main(){
    file, error := os.Open("E:/a.txt")

    if error != nil{
        fmt.Println("读取出错,错误为:", error)
    }

    defer file.Close()
    reader := bufio.NewReader(file)

    for {
        str, error := reader.ReadString('\n')
        if error == io.EOF{
            break
        }
        fmt.Println(str)
    }

    fmt.Println("文件读取成功,并且全部读取完毕。")
}

三、打开文件

func OpenFile()

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。

参数含义:

name:要打开的文件路径

文件打开模式:可以用“|”进行组合

FileMode代表文件的模式和权限位。这些字位在所有的操作系统都有相同的含义,因此文件的信息可以在不同的操作系统之间安全的移植。不是所有的位都能用于所有的系统,唯一共有的是用于表示目录的ModeDir位。

const (
    // 单字符是被String方法用于格式化的属性缩写。
    ModeDir        FileMode = 1 << (32 - 1 - iota) // d: 目录
    ModeAppend                                     // a: 只能写入,且只能写入到末尾
    ModeExclusive                                  // l: 用于执行
    ModeTemporary                                  // T: 临时文件(非备份文件)
    ModeSymlink                                    // L: 符号链接(不是快捷方式文件)
    ModeDevice                                     // D: 设备
    ModeNamedPipe                                  // p: 命名管道(FIFO)
    ModeSocket                                     // S: Unix域socket
    ModeSetuid                                     // u: 表示文件具有其创建者用户id权限
    ModeSetgid                                     // g: 表示文件具有其创建者组id的权限
    ModeCharDevice                                 // c: 字符设备,需已设置ModeDevice
    ModeSticky                                     // t: 只有root/创建者能删除/移动文件
    // 覆盖所有类型位(用于通过&获取类型位),对普通文件,所有这些位都不应被设置
    ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
    ModePerm FileMode = 0777 // 覆盖所有Unix权限位(用于通过&获取类型位)
)

这些被定义的位是FileMode最重要的位。另外9个不重要的位为标准Unix rwxrwxrwx权限(任何人都可读、写、运行)。这些(重要)位的值应被视为公共API的一部分,可能会用于线路协议或硬盘标识:它们不能被修改,但可以添加新的位。

权限控制:unix/linux系统下才生效,windows下设置无效-0666

package main
import (
    "fmt"
    "os"
    "bufio"
)

func main(){
    file, error := os.OpenFile("E:/a.txt", os.O_RDWR | os.O_APPEND | os.O_CREATE, 0666)

    if error != nil{
        fmt.Println("读取出错,错误为:", error)
        return
    }

    defer file.Close()
    writer := bufio.NewWriter(file)

    for i := 0; i<10; i++{
        writer.WriteString("Hi, golang\n")
    }

    writer.Flush()

    s := os.FileMode(0666).String()
    fmt.Println(s)
}

四、复制文件

package main
import (
    "fmt"
    "io/ioutil"
)

func main(){
    filePath1 := "E:/demo1.txt"
    filePath2 := "E:/demo2.txt"

    content, error := ioutil.ReadFile(filePath1)
    if error != nil{
        fmt.Println("读取有问题")
        return
    }

    error = ioutil.WriteFile(filePath2, content, 0666)

    if error != nil{
        fmt.Println("写出失败")
    }
}

 

标签:文件,读取,fmt,使用,golang,io,error,main,os
From: https://www.cnblogs.com/arichman/p/16909752.html

相关文章

  • Token和axios拦截器的初步了解和使用
    token为什么要有token默认情况下,HTTP是一个无状态协议,也就是说任何客户端浏览器都可以访问服务器,但是服务器并不能知道浏览器到底是属于哪个用户的。当客户端多次向服务......
  • SQLmap使用手册
    SQLmap使用手册参考连接https://www.tr0y.wang/2018/03/21/sqlmap-guide/#SQLmap-介绍SQLmap介绍什么是SQLmapSqlmap是由Python写成的,开源的自动化SQL......
  • Miniconda & vs code _ How to Set up Python and Visual Studio Code IDE for Dat
    原文:HowtoSetupPythonandVisualStudioCodeIDEforDataScience-OneZeroBlog SettingupPythonandrunningitsmoothlyonyourPCisessentialford......
  • msf使用记录
    使用记录参考资料https://xz.aliyun.com/t/3007得到会话,上传文件upload/root/360rd.exec:/ProgramData 大小写 #上传文件到目标机上执行exeexecute......
  • IOC - 额外补充
    多线程下解决读取不完整Bean问题1.二级缓存不能解决在多线程Bean在创建过程中读取不完整Bean的问题。额。。虽然在实际开发中不会启动ioc过程创建多线程去getBean,但是Sp......
  • WordPress 特色封面图像开启与使用
    wordpress特色图像可以用于分类页面或者网站首页调用文章缩略图时,指定调用某张图片,实现自定义封面的效果。WORDPRESS程序默认是不支持特色图像功能,所以我们需要开启特色图......
  • golang的GC
    golang采用三色标记法进行垃圾清理GC过程分为标记过程和清理过程产生错误的情况:黑色对象引用白色对象灰色对象到白色对象的引用被破坏破坏这两个条件之一就可以避免......
  • Golang实现hashmap
    golang实现hashmap思路:数组+链表->HashMap1.先看一下go里的map是怎么实现的go实现map采用拉链法的实现,如下图所示,键值对中的键会经过一个哈希函数,哈希函数会帮我们找到......
  • 【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述
    目标检测20年综述(2019)......
  • java集合类 collection接口,List集合
    java集合类:collection接口,List集合 在java.util包中提供了一些集合类,集合类又被称为容器,常用的有List集合,Set集合,Map集合。下面将介绍collection接口和List集合。1.co......