Go语言---文件分类、设备文件、磁盘文件、实现打开/写/读/关闭/拷贝文件

设备文件:
屏幕(标准输出设备) fmt.Println()往标准输出设备写内容
键盘(标准输入设备) fmt.Scan()从标准输入设备读取内容

磁盘文件,放在存储设备上的文件
文本文件:以记事本打开,能看到内容(不是乱码)
二进制文件:以记事本打开,能看到内容:(是乱码)

为什么需要文件?内存掉电丢失,程序结束,内存中的内容消失,文件放磁盘,程序结束,文件还是存在。

建立与打开文件

新建文件有两种方法:

create

func Create (name string) (file *File,err Error)

根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件象是可读写的。如果文件存在,它会清空文件。

NewFile

func NewFile (fd uintptr,name string) *File

根据文件描述符创建相应的文件,返回一个文件对象

打开文件有两种方法

Open

func Open (name string) (file *File,err Error)

该方法打开一个名称为 name 的文件,但是是只读方式,内部实现其实调用了 OpenFile

OpenFile

func OpenFile (name string,flag int,perm uint32) (file *File,err Error)

打开名称为 name 的文件,flag 是打开的方式,只读、读写等,perm是权限。不论是Create还是Open最终都会调用OpenFile
在这里插入图片描述
在这里插入图片描述

写文件

Write

func (file *File) Write(b []byte) (n int,err Error)

写入 byte 类型的信息到文件,以切片的方式,可以处理二进制或者非二进制

WriteAt

func (file *File) WriteAt(b []byte,off int64) (n int,err Error)

从指定位置开始写入 byte 类型的信息到文件

WriteString

func (file *File) WriteString(s string) (ret int,err Error)

写入string类型的信息到文件

读文件

Read

func (file *File) Read(b []byte) (n int,err Error)

读取数据到b中

ReadAt

func (file *File) ReadAt(b []byte,off int64) (n int,err Error)

从指定位置off开始读取数据到b中

删除文件

Remove

func Remove(name string) Error

调用该函数就可以删除文件名为name的文件

标准设备文件,默认打开,用户可以直接使用

可以调用os.Stdout.Close()将输出设备关闭

在这里插入图片描述
os.Stdout.Close()将其关闭后将无法输出

可以调用os.Stdin.Close()将输入设备关闭

在这里插入图片描述

  • 关闭后无法输入

实现写文件

在这里插入图片描述

  • 创建一个文件Create
  • 写数据WriteString
  • 关闭文件,defer在函数结束之前关闭文件Close

实现读文件

*

  • 打开文件Open
  • 读文件Read按指定的大小来读
  • 关闭文件Close

一行一行读

在这里插入图片描述
在这里插入图片描述

  • buf, err := r.ReadBytes('\n')代表着遇到’\n’结束读取,但是\n也会读取进去
    在这里插入图片描述

实现拷贝文件

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	list := os.Args
	if len(list) != 3 {
		fmt.Println("usage:xxx srcFile dstTile")
		return
	}

	srcFileName := list[1]
	dstFileName := list[2]

	if srcFileName == dstFileName {
		fmt.Println("源文件和目的文件不能相同")
		return
	}

	//只读方式打开
	sF, err1 := os.Open(srcFileName)
	if err1 != nil {
		fmt.Println("err1=", err1)
		return
	}

	//新建目的文件
	dF, err2 := os.Create(dstFileName)
	if err2 != nil {
		fmt.Println("err2=", err2)
		return
	}

	defer sF.Close()
	defer dF.Close()

	buf := make([]byte, 4*1024)
	for {
		n, err := sF.Read(buf)
		if err != nil {
			if err == io.EOF {
				//文件结束
				break
			}
			fmt.Println("err=", err)
		}
		//往目的文件写 读多少写多少
		dF.Write(buf[:n])
	}

}

在这里插入图片描述

相关推荐

  1. 【C语言文件

    2024-07-11 09:04:03       32 阅读
  2. python文件

    2024-07-11 09:04:03       25 阅读
  3. 文件

    2024-07-11 09:04:03       21 阅读
  4. Python:文件

    2024-07-11 09:04:03       24 阅读
  5. pytorch文件

    2024-07-11 09:04:03       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 09:04:03       7 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 09:04:03       8 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 09:04:03       6 阅读
  4. Python语言-面向对象

    2024-07-11 09:04:03       10 阅读

热门阅读

  1. PHP框架详解 - symfony框架

    2024-07-11 09:04:03       9 阅读
  2. 微信小程序---模板语法

    2024-07-11 09:04:03       11 阅读
  3. [终端安全]-6 移动终端之应用程序安全

    2024-07-11 09:04:03       8 阅读
  4. AI学习指南机器学习篇-层次聚类合并策略

    2024-07-11 09:04:03       11 阅读
  5. DPDK源码分析之(1)libmbuf模块补充

    2024-07-11 09:04:03       8 阅读
  6. 管理Python项目的工作目录和模块路径

    2024-07-11 09:04:03       9 阅读
  7. k8s 部署RuoYi-Vue-Plus之redis搭建

    2024-07-11 09:04:03       13 阅读