我一直在尝试自己学习Go,但是在尝试读取和写入普通文件时遇到了麻烦。
我可以说到最远inFile, _ := os.Open(INFILE, 0, 0)
,但是实际上获取文件的内容没有任何意义,因为read函数将a
[]byte
作为参数。
func (file *File) Read(b []byte) (n int, err Error)
让我们列出与Go 1兼容的清单,其中列出了在Go中读写文件的所有方式。
由于文件API最近已更改,并且大多数其他答案不适用于Go1。他们也错过了bufio
重要的恕我直言。
在以下示例中,我通过读取文件并将其写入目标文件来复制文件。
从基础开始
package main
import (
"io"
"os"
)
func main() {
// open input file
fi, err := os.Open("input.txt")
if err != nil {
panic(err)
}
// close fi on exit and check for its returned error
defer func() {
if err := fi.Close(); err != nil {
panic(err)
}
}()
// open output file
fo, err := os.Create("output.txt")
if err != nil {
panic(err)
}
// close fo on exit and check for its returned error
defer func() {
if err := fo.Close(); err != nil {
panic(err)
}
}()
// make a buffer to keep chunks that are read
buf := make([]byte, 1024)
for {
// read a chunk
n, err := fi.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if n == 0 {
break
}
// write a chunk
if _, err := fo.Write(buf[:n]); err != nil {
panic(err)
}
}
}
在这里,我使用了,os.Open
并且os.Create
它们是方便的包装器os.OpenFile
。我们通常不需要OpenFile
直接致电。
注意处理EOF。Read
尝试填充buf
每个调用,并io.EOF
在到达文件末尾时返回错误。在这种情况下buf
仍将保留数据。随之而来的调用Read
返回零作为读取的字节数,并且与io.EOF
错误相同。任何其他错误都会导致恐慌。
使用bufio
package main
import (
"bufio"
"io"
"os"
)
func main() {
// open input file
fi, err := os.Open("input.txt")
if err != nil {
panic(err)
}
// close fi on exit and check for its returned error
defer func() {
if err := fi.Close(); err != nil {
panic(err)
}
}()
// make a read buffer
r := bufio.NewReader(fi)
// open output file
fo, err := os.Create("output.txt")
if err != nil {
panic(err)
}
// close fo on exit and check for its returned error
defer func() {
if err := fo.Close(); err != nil {
panic(err)
}
}()
// make a write buffer
w := bufio.NewWriter(fo)
// make a buffer to keep chunks that are read
buf := make([]byte, 1024)
for {
// read a chunk
n, err := r.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if n == 0 {
break
}
// write a chunk
if _, err := w.Write(buf[:n]); err != nil {
panic(err)
}
}
if err = w.Flush(); err != nil {
panic(err)
}
}
bufio
在这里只是充当缓冲区,因为我们与数据无关。在大多数其他情况下(尤其是文本文件),bufio
它为我们提供了一个很好的API,可轻松灵活地进行读写,同时还可以处理后台缓冲,因此非常有用。
使用ioutil
package main
import (
"io/ioutil"
)
func main() {
// read the whole file at once
b, err := ioutil.ReadFile("input.txt")
if err != nil {
panic(err)
}
// write the whole body at once
err = ioutil.WriteFile("output.txt", b, 0644)
if err != nil {
panic(err)
}
}
非常简单!但是,只有在确定不处理大文件时才使用它。
问题内容: 我有两个String 。 现在,我想将其保存在一个外部文件中以供以后使用,而无需再次对其进行初始化… 那么,如何保存以便以后再次使用? 问题答案: 实现,因此您可以使用常规序列化将哈希映射写入文件 这是Java的链接-序列化示例
问题内容: 我有一个包含内容的文件 如何使用Python 阅读? 同样,如果我有 如何data使用Python 写入CSV文件? 问题答案: 以下是一些最小的完整示例,这些示例如何读取CSV文件以及如何使用Python编写CSV文件。 Python 2 + 3:读取CSV文件 Python 之后,的内容data_read是 Unicode和Python 2.X 如果要编写Unicode,则必须安装
需要一些快速帮助。我正在尝试编写一个java程序来生成一个报告。我在一个docx文件中有报告模板。 我想要做的是,使用该docx文件作为模板,将数据多次放入其中,用于各种记录,并将其写入一个新的docx文件。主要的事情是我想维护docx文件中内容的格式和缩进。它们是子弹数据。这就是问题所在。 下面是处理上述操作的代码段, 如果可以请引导。多谢.
问题内容: 我一直在寻找官方的php文档,但找不到我想要的东西。 http://php.net/manual/zh/function.parse-ini- file.php 我只想要一个函数来编辑和读取php ini文件中的值,例如, 如何读取属于“ lu_link”或“ footerbg”的值? 我该如何为这些地点写下新的价值? 问题答案: PEAR Config_Lite包可以非常轻松地为您完
问题内容: 我必须读写XML文件。使用Java读写XML文件的最简单方法是什么? 问题答案: 这是一个快速的DOM示例,显示了如何使用dtd读写简单的xml文件: 和dtd: 首先导入这些: 这是你需要的一些变量: 这是一个阅读器(字符串xml是你的xml文件的名称): getTextValue在这里: 添加一些访问器和更改器,你就完成了!
问题内容: 我想用3列N行从Java读写Excel文件,在每个单元格中打印一个字符串。谁能给我简单的代码片段吗?我是否需要使用任何外部库,或者Java是否内置支持? 我要执行以下操作: 问题答案: Apache POI可以为你做到这一点。特别是HSSF模块。该快速指南是最有用的。这是你想做什么的方法-专门创建一张纸并将其写出来。