Golang中文件目录操作的实现

这篇具有很好参考价值的文章主要介绍了Golang中文件目录操作的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Golang中文件目录操作的实现

目录

文件

文件目录

文件目录操作

读取文件

一、方法一 (file.Read())

二、方法二 (bufio读取文件)

三、方法三 (ioutil 读取方法)

写入文件

一、方法一

二、方法二

三、方法三 (ioutil写入文件)

复制文件

一、方法一

二、方法二


文件

       Golang中,文件是指计算机中存储数据的实体,文件可以是文本文件、二进制文件、配置文件等。在Go语言中,通过操作文件,我们可以读取文件的内容,写入数据到文件,以及获取文件的属性等。

Golang中的文件可以分为两种类型:文本文件和二进制文件。文本文件是指只包含文本内容的文件,可以用文本编辑器打开进行查看和编辑。而二进制文件是指除文本内容外还包含其他数据的文件,如图片、音频、视频等文件。

在Golang中,文件是以文件流的形式进行操作的,文件流是指将文件中的内容作为一个流来处理的方式,通过读取流来获取文件的内容,通过写入流来向文件中写入数据。


文件目录

在Golang中,文件目录是指计算机文件系统中的文件夹或目录。目录是用于组织和存储文件的一种方式,可以包含文件和其他子目录。

Golang中的文件目录操作基本概念主要涉及文件和目录的创建、打开、读取、写入、删除等操作。

文件路径:文件路径是用于定位文件或目录的字符串。在Go语言中,可以使用绝对路径或相对路径来表示文件路径。绝对路径是从根目录开始的完整路径,而相对路径是相对于当前工作目录的路径。

文件操作:在Go语言中,可以使用os包进行文件操作。常用的文件操作包括创建文件、打开文件、读取文件内容、写入文件内容和关闭文件等。

目录操作:同样在os包中,可以进行目录操作,如创建目录、删除目录、遍历目录等。常用的目录操作函数包括MkdirMkdirAllRemoveRemoveAllReadDir等。

文件信息:通过os包中的函数,可以获取文件的相关信息,如文件大小、修改时间、权限等。常用的文件信息函数包括StatFileInfo等。

文件读写:Go语言中的文件读写操作可以使用os包中的Open函数打开文件,然后使用ReadWrite方法来读取和写入文件内容。还可以使用bufio包提供的缓冲读写方式来提高读写效率。

错误处理:在文件和目录操作过程中,可能会出现各种错误,如文件不存在、权限不足等。在Go语言中,通过错误返回值来处理这些错误,常用的处理方式包括检查错误值、使用defer语句关闭文件和使用log包输出错误信息等。

文件删除:在Go语言中,可以使用os包中的Remove函数删除文件。需要注意的是,删除文件是一个不可逆操作,谨慎使用。

总而言之,Go语言提供了丰富的文件和目录操作函数,可以方便地进行文件和目录的创建、打开、读写和删除等操作。开发者可以根据具体需求使用这些函数来处理文件和目录操作。


文件目录操作

读取文件

一、方法一 (file.Read())

1、只读方式打开文件 file,err := os.Open()

2、读取文件 file.Read()

3、关闭文件流 defer file Close()

package main

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

func main() {
    //只读方式打开当前目录下的main.go文件
	file, err := os.Open("D:/GoLang/go_demo/helloworld/hello.go")
	defer file.Close() //必须关闭文件流
	if err != nil {
		fmt.Println(err)
		return
	}
	//操作文件
	fmt.Println(file) //&{0xc000100780}
	//读取文件里面的内容
	var strSlice []byte
	var tempSlice = make([]byte, 20)
	for {
		n, err := file.Read(tempSlice)
		if err == io.EOF { //err == io.EOF表示读取完毕
			fmt.Println("读取完毕")
			break
		}
		if err != nil {
			fmt.Println("读取失败")
			return
		}
		strSlice = append(strSlice, tempSlice[:n]...) //注意写法
	}
	fmt.Println(string(strSlice)) //强制类型转换
}

成功读取到了文件的地址

Golang中文件目录操作的实现

二、方法二 (bufio读取文件)

1、只读方式打开文件 file,err := os.Open()

2、创建reader对象 reader := bufio.NewReader(file)

3、ReadString读取文件 line,err := reader.ReadString('\n')

4、关闭文件流 defer file.Close()

package main

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

func main() {
    file, err := os.Open("D:/GoLang/go_demo/helloworld/hello.go")
	defer file.Close() //必须关闭文件流
	if err != nil {
		fmt.Println(err)
		return
	}
	//bufio读取文件
	var fileStr string
	reader := bufio.NewReader(file)
	for {
		line, err := reader.ReadString('\n') //表示一次读取一行
		if err == io.EOF {
			fileStr += line
			break
		}
		if err != nil {
			fmt.Println(err)
			return
		}
		fileStr += line
	}
	fmt.Println(fileStr)
}

三、方法三 (ioutil 读取方法)

打开关闭文件的方法它都封装好了,只需要一句话就可以读取

ioutil.ReadFile("D:/GoLang/go_demo/helloworld/hello.go")

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
    byteStr, err := ioutil.ReadFile("D:/GoLang/go_demo/helloworld/hello.go")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(byteStr))
}

写入文件

写入文件需要用到os.OpenFile(),其源码为:

func OpenFile(name string, flag int, perm FileMode) (*File, error) {
	testlog.Open(name)
	f, err := openFileNolog(name, flag, perm)
	if err != nil {
		return nil, err
	}
	f.appendMode = flag&O_APPEND != 0

	return f, nil
}

name 要打开的文件名,flag 打开文件的格式,perm 文件权限,一个八进制数 r(读)04 w(写)02 x(执行)01

其中flag分为:

os.O_WRONLY 只写

os.O_CREATE 创建文件

os.O_RDONLY 只读

os.O_RDWR 读写

os.O_TRUNC 清空

os.O_APPEND 追加

一、方法一

1、打开文件 file, err := os.OpenFile("D:/GoLang/go_demo/helloworld/hello.go", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)

2、写入文件

file.Write([]byte(str)) //写入字节切片数据

file.WriteString("直接写入的字符串数据") //直接写入的字符串数据

3、关闭文件流 file.Close()

package main

import (
	"fmt"
	"os"
)

func main() {
    file, err := os.OpenFile("D:/GoLang/go_demo/helloworld/hello.go", os.O_CREATE|os.O_APPEND, 0666)
	defer file.Close()
	if err != nil {
		fmt.Println(err)
		return
	}
	file.WriteString("//直接写入的字符串数据")
}

 hello.go中就会被按要求追加

Golang中文件目录操作的实现

二、方法二

1、打开文件 file, err := os.OpenFile("D:/GoLang/go_demo/helloworld/hello.go", os.O_CREATE|os.O_APPEND, 0666)

2、创建writer对象 writer := bufio.NewWriter(file)

3、将数据写入缓存 writer.WriteString("你好Golang\n")

4、将缓存中的内容写入文件 writer.Flush()

5、关闭文件流 file.Close()

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
    file, err := os.OpenFile("D:/GoLang/go_demo/helloworld/hello.go", os.O_CREATE|os.O_APPEND, 0666)
	defer file.Close()
	if err != nil {
		fmt.Println(err)
		return
	}
	writer := bufio.NewWriter(file)
	for i := 0; i < 10; i++ {
		writer.WriteString("//你好Golang" + strconv.Itoa(i) + "\n")
	}
	writer.Flush()
}

按要求追加数据

Golang中文件目录操作的实现

三、方法三 (ioutil写入文件)

str := "hello Golang"

err := ioutil.WriteFile("D:/GoLang/go_demo/helloworld/hello.go", []byte(str), 0666)

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
    str := "//hello golang"
	err := ioutil.WriteFile("D:/GoLang/go_demo/helloworld/hello.go", []byte(str), 0666)
	if err != nil {
		fmt.Println(err)
		return
	}
}

Golang中文件目录操作的实现


复制文件

一、方法一

byteStr, err1 := ioutil.ReadFile("D:/GoLang/go_demo/helloworld/hello.go")

err2 := ioutil.WriteFile("D:/GoLang/go_demo/helloworld/world.go", byteStr, 0666)

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
    byteStr, err1 := ioutil.ReadFile("D:/GoLang/go_demo/helloworld/hello.go")
	if err1 != nil {
		fmt.Println(err1)
		return
	}
	err2 := ioutil.WriteFile("D:/GoLang/go_demo/helloworld/world.go", byteStr, 0666)
	if err2 != nil {
		fmt.Println(err2)
		return
	}
	fmt.Println("复制文件成功 ")
}

成功复制hello.go中的内容Golang中文件目录操作的实现

二、方法二

source, _ := os.Open(srcFileName)

destination, _ := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)

n, err := source.Read(buf)

destination.Write(buf[:n]);

package main

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

// 编写一个函数,接受两个文件路径 srcFileName 和 dstFileName
func CopyFile(srcFileName string, dstFileName string) (err error) {
	sFile, err1 := os.Open(srcFileName)
	defer sFile.Close()
	dFile, err2 := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
	defer dFile.Close()
	if err1 != nil {
		return err1
	}
	if err2 != nil {
		return err2
	}
	var tempSlice = make([]byte, 50)
	for {
		//读取数据
		n, err := sFile.Read(tempSlice)
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}
		//写入数据
		if _, err := dFile.Write(tempSlice[:n]); err != nil {
			return err
		}
	}
	return nil
}

func main() {
    srcFile := "D:/GoLang/go_demo/helloworld/hello.go"
	dstFile := "D:/GoLang/go_demo/helloworld/world.go"
	err := CopyFile(srcFile, dstFile)
	if err == nil {
		fmt.Println("拷贝完成")
	} else {
		fmt.Printf("拷贝错误 err = %v", err)
	}
}

成功拷贝

Golang中文件目录操作的实现文章来源地址https://www.toymoban.com/news/detail-466180.html

到了这里,关于Golang中文件目录操作的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 命令操作(一)——文件和目录操作

    目录信息 参考链接 Linux常用操作命令大全 1.1、创建文件夹 1.1.1、创建目录 1.1.2、创建文件 touch命令操作 1.2、删除文件夹/文件 1.2.1、删除目录操作 1.2.2、删除文件 1.3、重命名目录或者文件名称 1.4、目录切换 1.5、目录以及文件列表查看 1.6、复制目录或者文件 -r 递归处理,将

    2024年02月03日
    浏览(46)
  • Golang操作阿里云OSS上传文件

    为什么要使用OSS?应用场景是什么? 最近在开发考试系统,里面需要上传课件,课件包括pdf,map等等各种类型的文件,这些文件不能像图片一样,直接上传到项目目录下面,需要单独存放,阿里云就提供了存储方式,然后OSS是其中的一种,可以用来存储一些文件。 我们需要

    2024年02月02日
    浏览(50)
  • Linux 目录和文件常见操作

    就常见的命令: pwd pwd 显示当前的目录 我以如下的目录大致结构做一个简单的例子 cd 迁移到指定的路径,可以指定相对路径和绝对路径,默认相对 .指向当前路径,…/ 指向上一级的目录。 ls 列出文件及其目录 命令选项: -F 区分文件和目录,目录后面会加上/ -a 显示隐藏文

    2024年02月13日
    浏览(38)
  • 文件目录操作——Linux命令核心

    目录 相对路径和绝对路径  查看和切换工作目录 pwd 显示当前工作目录的绝对路径 cd 切换目录 列出目录内容 ls 列出目录的内容 创建和删除目录文件夹 mkdir创建一个新目录 rmdir 删除一个空的目录 touch 创建空文件 cp复制文件或者目录 rm 删除文件或目录  mv移动文件与目录或重

    2024年02月01日
    浏览(42)
  • 【100天精通python】Day20:文件及目录操作_os模块和os.psth模块, 文件路径拼接,目录操作

    目录 专栏导读  1 文件的目录操作  os模块的一些操作目录函数​编辑

    2024年02月14日
    浏览(52)
  • 【100天精通python】Day19:文件及目录操作_基本文件操作

    目录 专栏导读  1 文件的创建打开和关闭 2.1 使用内置函数open(),close()创建打开和关闭

    2024年02月14日
    浏览(57)
  • 文件操作安全之-目录穿越原理篇

    本节将详细解释一下目录穿越相关内容,作为我的专栏《安全运营之网络攻击研判分析》中的一节。本文主要阐述目录穿越相关的原理,关于目录穿越攻击的流量示例,以及分析研判等内容,详见这里。 Linux系统中提供了./用以表示当前目录,…/表示上一级目录,如下是Lin

    2024年02月08日
    浏览(34)
  • Windows基础命令:目录和文件操作&文本处理&网络相关操作

    方法一:打开\\\"运行\\\"对话框(Win+R),输入cmd 也可以通过cmd /c 命令和cmd /k 命令的方式来直接运行命令(/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口) 方法二:在任务栏直接搜索“cmd” 显示当前目录或改变当前目录 语法规则 (1)显示目录 显示当前驱动

    2024年02月05日
    浏览(43)
  • 【100天精通python】Day19:python文件及目录操作_基本文件操作

    目录 专栏导读  1 文件的创建打开和关闭 2.1 使用内置函数open(),close()创建打开和关闭

    2024年02月15日
    浏览(46)
  • Linux文件目录操作命令-mv命令

            mv 命令是 move 的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。  mv 命令中第二个参数类型的不同(是目标文件还是目标目录), mv 命令将文件重命名或将其移至一个新的目录中。当第二个参数类型

    2024年02月02日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包