译者按:熟悉Linux的读者应该很熟悉权限模式,通过Linux命令chmod可以更改文件的权限 https://www.linux.com/learn/understanding-linux-file-permissions
补充了原文未介绍的flag
一个普通的文件是一个指向硬盘的inode的地方。 硬链接创建一个新的指针指向同一个地方。只有所有的链接被删除后文件才会被陵磨删除。硬链接只在相同的文件系统中才工作。你可以认为一个硬链接是一个正常的链接。
symbolic link,又叫软连接,和硬链接有点不一样,它不直接指向硬盘中的相同的地方,而是通过名字引用其它文件。他们可以指向不同的文件系统中的不同文件。并不是所有的 *** 作系统都支持软链接。
复制文件
可以使用os包写入一个打开的文件。 因为Go可执行包是静态链接的可执行文件,你import的每一个包都会增加你的可执行文件的大小。其它的包如io、`ioutil`、`bufio`提供了一些方法,但是它们不是必须的。
ioutil包有一个非常有用的方法WriteFile()可以处理创建/打开文件、写字节slice和关闭文件一系列的 *** 作。如果你需要简洁快速地写字节slice到文件中,你可以使用它。
bufio包提供了带缓存功能的writer,所以你可以在写字节到硬盘前使用内存缓存。当你处理很多的雹指数据很有用,因为它可以节省 *** 作硬盘I/O的时间。在其它一些情况下它也很有用,比如你每次写一个字节,把它们攒在内存缓存中,然后一次写入到硬盘中,减少硬盘的磨损以及提升性能。
读取最多N个字节
os.File提供了文件 *** 作的基本功能, 而io、ioutil、bufio提供了额外的辅助函数。
有缓存写也有缓存读。 缓存reader会把一些内容缓存在内存中。它会提供比os.File和io.Reader更多的函数,缺省的缓存大小是4096,最小缓存是16。
Scanner是bufio包下的类型,在尺肆斗处理文件中以分隔符分隔的文本时很有用。 通常我们使用换行符作为分隔符将文件内容分成多行。在CSV文件中,逗号一般作为分隔符。 os.File文件可以被包装成bufio.Scanner,它就像一个缓存reader。 我们会调用Scan()方法去读取下一个分隔符,使用Text()或者Bytes()获取读取的数据。
分隔符可以不是一个简单的字节或者字符,有一个特殊的方法可以实现分隔符的功能,以及将指针移动多少,返回什么数据。 如果没有定制的SplitFunc提供,缺省的ScanLines会使用newline字符作为分隔符,其它的分隔函数还包括ScanRunes和ScanWords,皆在bufio包中。
打包(zip) 文件
其它
临时文件和目录
ioutil提供了两个函数: TempDir() 和 TempFile()。 使用完毕后,调用者负责删除这些临时文件和文件夹。 有一点好处就是当你传递一个空字符串作为文件夹名的时候,它会在 *** 作系统的临时文件夹中创建这些项目(/tmp on Linux)。 os.TempDir()返回当前 *** 作系统的临时文件夹。
上面的例子复制整个文件内容到内存中,传递给hash函数。 另一个方式是创建一个hash writer, 使用Write、WriteString、Copy将数据传给它。 下面的例子使用 md5 hash,但你可以使用其它的Writer。
文件分类:文本文件和二进制文件
文本文件可读性好,占用的数据空间大
二进制文件,可读性差,占用的数据空间小
文件存取方式:随机存取和顺序存放
随机存取: *** 作速度慢,对磁盘的消耗大
顺序存放: *** 作数据块,对磁盘的消耗小
初级方法
高级方法
在程序和文件之间,添加一个缓冲区,每次程序读取文件内容的时候,先去缓冲区查看,如果需要的内容,直接获取,如果没有再去文件中获取
由于缓冲是在内存当中的,和程序的交互返回速度会非常快,神晌这样可以大大提高程序的性能和速度罩歼
缺点:有的数据是只在缓冲中存储的,如果在缓冲释放之前游闷锋,没有将数据实例化落盘,会导致数据的丢失
按行 *** 作文件对象
将之前的file方法封装起来,可以更加方便的使用
使用gzip.NewReader(文件句柄),来 *** 作压缩文件
示例: file,err := os.OpenFile("main.go", os.O_WRONLY|os.O_WRONLY, 0666)
三个参数,
文件 *** 作方法,需要注意不能冲突
*** 作完成后,当前目录出现一个text.txt 文件,内容是:hello world,test
这里可以可以考虑使用buffio来实现
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)