首页 > 其他分享 >Go语言学习之 Day06

Go语言学习之 Day06

时间:2023-01-15 21:03:12浏览次数:56  
标签:文件 Log err filepath Day06 Go path os 语言

文件操作

  • 读文件: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
	})
}

标签:文件,Log,err,filepath,Day06,Go,path,os,语言
From: https://www.cnblogs.com/yuleicoder/p/17017768.html

相关文章

  • Go语言学习之 Day07
    Go学习day07接口接口是自定义类型,是对是其他类型行为的抽象定义:接口定义使用interface标识,声明了一系列的函数签名(函数名、函数参数、函数返回值),在定义接口时可......
  • Go语言学习之 Day04
    函数函数-定义&调用函数包含函数名、行参列表、函数体和返回值列表,使用func进行声明,函数无参数或返回值时则形参列表和返回值列表省略funcname(parameters)return{......
  • C 语言初学者必备开发工具——Dev-Cpp [ 图文安装教程 ]
    前言C语言是一门功能强大的专业化编程语言,深受专业程序员和业余编程爱好者的喜爱,同时C语言也是当今最流行的嵌入式开发语言。大多数嵌入式项目的开发都是用C语言来编......
  • golang 为图片加水印
    前段时间一个需求涉及到给图片加水印,考虑图片安全性,决定放在后端加水印。记录一下代码。思路思路是先为水印文字生成一个仅包含水印文字的图片,把这个图片倾斜一定角度(......
  • GO map按某字段排序
    packagemainimport("fmt""sort")typefrequencystruct{charstringfreint}funcfrequencies(sstring)[]frequency{m:=make(map[string]int)f......
  • C语言指针统览
    前言本文对C语言指针和指针使用时的问题做一个概览性的总结,并对一些值得探讨的问题进行讨论。阅读本文,读者能达到统览C语言指针的目的。以下的讨论只针对32/64位机器。指针......
  • (转)Golang - new和make的使用和区别(示例详解)
    原文:https://www.cnblogs.com/beatleC/p/16081832.html前言:Go语言中new和make是内置函数,主要用来创建分配类型内存(相同点:堆上),其功能相似,却有本质区别。引入:变量的声明v......
  • Go内存逃逸
    前言很久以前就听过过内存逃逸这个词,最近了解了一下,才发现是个很简单的概念.只要把前言部分看完,就已经了解了.来吧...在介绍内存逃逸之前,我们先用C语言来引出......
  • 二叉树的线索化——C语言描述
    二叉树的线索化——C语言描述目录二叉树的线索化——C语言描述0测试用例框架1定义2数据结构3实现方法4测试用例0测试用例框架https://blog.csdn.net/m0_59469991......
  • (转)golang 函数
    原文:https://www.cnblogs.com/duoke360/p/15663943.htmlgolang函数简介函数的go语言中的一级公民,我们把所有的功能单元都定义在函数中,可以重复使用。函数包含函数的名称......