Go语言学习之 Day06

文件操作

  • 读文件:Open:打开文件并返回文件对象指针
  • 写文件:Create:创建文件并返回文件对象指针(文件不存在则创建,文件存在则清空)
  • 追加文件:OpenFile:按指定权限打开文件,并返回文件指针对象
Mode:获取文件模式
Flag:获取日志开头
  • 文件位置:Seek:设置文件指针位置
  • 删除文件:Remove:移除文件或空文件夹
  • RemoveAll:移除所有文件
  • 重命名:Rename

image

标准流

os包提供了对文件、系统和进程的操作函数
文件操作

  • 常用常量:
Stdin
Stdout
Stderr
ModePerm:0777
  • 常用函数:
Chmod:修改文件权限
Chown:修改文件所属用户,用户组
Chtimes:修改文件访问时间和修改时间
IsExist:与os.Stat一起用于判断文件存在
IsNotExist:与os.Stat一起用于判断文件不存在
Link:创建软链接
Mkdir:创建文件夹
MkdirAll:创建文件夹(父目录不存在逐层创建)

文件格式

带缓冲IO -bufio

bufio包提供缓冲流的功能

a)常用结构体

Reader

常用函数

  • NewReader:创建缓冲输入流
    常用方法
  • Read:读取数据到切片中
  • ReadLine:读取一行内容到字节切片中
  • ReadSlice:根据分隔符读取数据到字节切片
  • ReadString:根据分隔符读取数据到字符串
  • Reset:重设缓冲流
  • WriteTo:将数据写入到输出流
    image

Writer

常用函数

  • NewWriter:创建缓冲输出流
    常用方法
  • Write:将字节切片内容写入
  • WriteString:将字符串写入
  • Reset:重置输出流
  • Flush: 刷新数据到输出流
    image

Scanner

常用函数

  • NewScanner:创建扫描对象
    常用方法
  • Scan:扫描数据
  • Split:定义流分割函数,默认空格
  • Text:读取数据
  • Err:获取错误
    image

目录操作

常用包

File:对文件操作

常用方法:

  • Read:读取文件到字节切片
  • Write:写入字节切片到文件
  • WriteString:写入字符串到文件
  • Readdir:获取目录下所有文件信息
  • Readdirnames:获取目录下所有文件名
  • Seek:设置文件指针位置
  • Stat:获取文件状态信息
  • Sync:同步文件到硬盘
  • Close:关闭文件

image
image

image

image

image

文件格式-csv

encoding/csv包提供对csv文件读写的操作
常用结构体

Reader

常用函数
NewReader
常用方法
Read
ReadAll

Writer

常用函数
NewWriter
常用方法
Write
WriteAll
Flush
package day06

import (
	"encoding/csv"
	"os"
	"testing"
)

func TestCsv(t *testing.T) {
	file, _ := os.Open("table.csv")
	defer file.Close()

	reader := csv.NewReader(file)
	line, err := reader.Read()
	t.Log(err, line)

	line, err = reader.Read()
	t.Log(err, line)

	line, err = reader.Read()
	t.Log(err, line)

	line, err = reader.Read()
	t.Log(err, line)

	file, _ = os.Create("table.csv")
	writer := csv.NewWriter(file)
	writer.Write([]string{"A1", "B1", "C1"})
	writer.Write([]string{"A2", "B2", "C2"})
	writer.Write([]string{"A3", "B3", "C3"})
	writer.Write([]string{"A4", "B4", "C4"})
	writer.Flush()
}

常用包-os

FileInfo:文件状态信息
常用函数:
Lstat:获取文件路径文件信息(对于链接返回连接文件信息)
Stat:获取文件路径文件信息(对于链接返回连接到的文件的信息)
常用方法:
Name:获取文件名
Size:获取文件大小
Mode:获取文件模式
ModTime:获取修改时间
IsDir:判断是否为文件夹
点击查看代码
func TestFileInfo(t *testing.T) {
	path := "mgr1"
	file, err := os.Stat(path) // os.Lstat =>连接 =>连接文件 Stat => 原文件
	if err != nil {
		t.Log(err) //CreateFile mgr1: The system cannot find the file specified.
		if os.IsNotExist(err) {
			t.Log("文件不存在")
			return
		}
		log.Fatal(err)
	}
	t.Log(file.IsDir())
}

常用包-path/filepath

filepath 包提供对文件路径的操作,兼容不同操作系统
常用函数

Abs:绝对路径
Base:文件名
Clean:清除文件路径中.、..等字符
Dir:文件文件目录
Ext:获取文件后缀
FromSlash:格式化路径分割符(\)
ToSlash:格式化路径分割符(/)
Glob:获取匹配格式的文件路径切片
IsAbs:判断是否为绝对路径
Join:连接路径
Match:判断路径是否匹配格式
Split:分割文件目录和文件名
SplitList:分割路径分割符(冒号或分号)连接的文件路径
Walk:遍历目录中文件(子孙)
点击查看代码
package day06

import (
	"io/fs"
	"os"
	"path/filepath"
	"testing"
)

func TestFilePath(t *testing.T) {
	t.Log(filepath.Abs("."))
	path := "C:\\Users\\wenyu\\GolandProjects"
	t.Log(filepath.Dir(path), filepath.Base(path), filepath.Ext(path))
	t.Log(filepath.IsAbs("."), filepath.IsAbs(path), filepath.IsAbs("C:\\"))

	t.Log(filepath.Clean("C:\\Users\\wenyu\\GolandProjects\\mage\\..\\day06")) //  C:\Users\wenyu\GolandProjects\day06
	t.Log(filepath.Clean("/root/a/../kk.txt"))

	// 路径转换
	t.Log(filepath.FromSlash("/root/a/..\\kk.txt"), filepath.ToSlash("/root/a/..\\kk.txt"))
	// 转成斜杠
	t.Log(filepath.ToSlash(filepath.Join("/root/kk", "a", "b", "kk.txt")))

	t.Log(filepath.Split(path))
	t.Log(filepath.SplitList(os.Getenv("PATH")))
	// /root/所有的.go文件 /root/*.go
	// glob
	// * 匹配任意多个
	// ? 匹配一个
	// (f1|f2|f3)
	t.Log(filepath.Glob("./*.go"))
	t.Log(filepath.Glob("./*.txt"))
	t.Log(filepath.Glob("../*/*.go"))

	t.Log(filepath.Match("./*.txt", "./fprint.txt"))
	t.Log(filepath.Match("./*.txt", "./atxt"))

	// 遍历当前目录 或者 指定目录下面的内容
	filepath.Walk(".", func(path string, fileInfo fs.FileInfo, err error) error {
		t.Log(path, fileInfo.IsDir(), fileInfo.Name())
		return nil
	})
}

posted @ 2023-01-15 20:45  元贞  阅读(15)  评论(0编辑  收藏  举报