Go操作文件的方式有很多,这里只是整理一下做一个记录。所有代码可以直接拿来使用,代码很简单,就不做更多解释了。
读取文件
通过os.Open读取文件
如下代码:
func TestReadFile(t *testing.T) {
fileName := "/tmp/mockdata.txt"
file, err := os.Open(fileName)
defer closeResource(file)
if err != nil {
log.Fatalf("failed to open file %s", fileName)
}
var tempSlice = make([]byte, 128)
var strSlice []byte
for {
n, err := file.Read(tempSlice)
if err == io.EOF {
log.Printf("%s is read compeletely.", fileName)
break
}
if err != nil {
log.Fatalf("failed to read file.")
}
log.Printf("read %d bytes\n", n)
strSlice = append(strSlice, tempSlice[:n]...)
}
log.Println(string(strSlice))
}
func closeResource(closeable io.Closer) {
if closeable != nil {
if err := closeable.Close(); err != nil {
log.Errorln("failed to close resource.", err)
}
}
}
通过bufio读取文件
如下代码:
func TestReadFile(t *testing.T) {
fileName := "/tmp/mockdata.txt"
file, err := os.Open(fileName)
defer closeResource(file)
if err != nil {
log.Fatalf("failed to open file %s", fileName)
}
var tempSlice = make([]byte, 128)
var strSlice []byte
for {
n, err := file.Read(tempSlice)
if err == io.EOF {
log.Printf("%s is read compeletely.", fileName)
break
}
if err != nil {
log.Fatalf("failed to read file.")
}
log.Printf("read %d bytes\n", n)
strSlice = append(strSlice, tempSlice[:n]...)
}
log.Println(string(strSlice))
}
func closeResource(closeable io.Closer) {
if closeable != nil {
if err := closeable.Close(); err != nil {
log.Errorln("failed to close resource.", err)
}
}
}
通过ioutil读取文件
如下代码:
func TestReadFileByIOUtil(t *testing.T) {
fileName := "/tmp/mockdata.txt"
bytes, err := ioutil.ReadFile(fileName)
if err != nil {
log.Fatalf("failed to open file %s", fileName)
}
t.Log(string(bytes))
}
写文件
通过file.Write写入文件
如下代码:
func TestWriteFile(t *testing.T) {
fileName := "test.txt"
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
t.Fatal(err)
}
defer closeResource(file)
_, err = file.WriteString("wtf")
if err != nil {
t.Fatal(err)
}
}
func closeResource(closeable io.Closer) {
if closeable != nil {
if err := closeable.Close(); err != nil {
log.Errorln("failed to close resource.", err)
}
}
}
通过bufio写入文件
如下代码:
func TestWriteFileViaBufferIO(t *testing.T) {
fileName := "test1.txt"
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
t.Fatal(err)
}
defer closeResource(file)
writer := bufio.NewWriter(file)
defer closeResource(writer)
_, err = writer.WriteString("just a test")
if err != nil {
t.Fatal(err)
}
err = writer.Flush()
if err != nil {
t.Fatal(err)
}
}
func closeResource(closeable io.Closer) {
if closeable != nil {
if err := closeable.Close(); err != nil {
log.Errorln("failed to close resource.", err)
}
}
}
通过ioutil写入文件
如下代码:
func TestWriteFileViaIOUtil(t *testing.T) {
fileName := "test2.txt"
err := ioutil.WriteFile(fileName, []byte("just a test file."), 0666)
if err != nil {
t.Fatal(err)
}
}
后记
通过以上的例子,可以发现ioutil包提供了很多有用的方法。如果需要操作文件,优先看看ioutil包里有没有提供对应的方法。