Golang简单写文件操作的四种方法

本文介绍了使用Golang进行文件写入操作的四种不同方法,包括使用io.WriteString、ioutil.WriteFile、os.File的Write及WriteString方法以及利用bufio.Writer进行缓冲写入。通过实例演示了如何根据文件存在与否选择打开或创建文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载别人的代码

http://www.android100.org/html/201407/28/47230.html


package main

import (
 "bufio"  //缓存IO
 "fmt"
 "io/ioutil" //io 工具包
 "io"
 "os"
)

func check(e error) {
 if e != nil {
  panic(e)
 }
}

/**
 * 判断文件是否存在  存在返回 true 不存在返回false
 */
func checkFileIsExist(filename string) (bool) {
 var exist = true;
 if _, err := os.Stat(filename); os.IsNotExist(err) {
  exist = false;
 }
 return exist;
}

/**
    from: http://www.isharey.com/?p=143
 */

func main() {
 var wireteString = "测试n"
 var filename = "./output1.txt";
 var f    *os.File
 var err1   error;
 /***************************** 第一种方式: 使用 io.WriteString 写入文件 ***********************************************/
 if checkFileIsExist(filename) {  //如果文件存在
  f, err1 = os.OpenFile(filename, os.O_APPEND, 0666)  //打开文件
  fmt.Println("文件存在");
 }else {
  f, err1 = os.Create(filename)  //创建文件
  fmt.Println("文件不存在");
 }
 check(err1)
 n, err1 := io.WriteString(f, wireteString) //写入文件(字符串)
 check(err1)
 fmt.Printf("写入 %d 个字节n", n);

/*****************************  第二种方式: 使用 ioutil.WriteFile 写入文件 ***********************************************/
 var d1 = []byte(wireteString);
 err2 := ioutil.WriteFile("./output2.txt", d1, 0666)  //写入文件(字节数组)
 check(err2)

/*****************************  第三种方式:  使用 File(Write,WriteString) 写入文件 ***********************************************/
 f, err3 := os.Create("./output3.txt")  //创建文件
 check(err3)
 defer f.Close()
 n2, err3 := f.Write(d1)  //写入文件(字节数组)
 check(err3)
 fmt.Printf("写入 %d 个字节n", n2)
 n3, err3 := f.WriteString("writesn") //写入文件(字节数组)
 fmt.Printf("写入 %d 个字节n", n3)
 f.Sync()



 /***************************** 第四种方式:  使用 bufio.NewWriter 写入文件 ***********************************************/
 w := bufio.NewWriter(f)  //创建新的 Writer 对象
 n4, err3 := w.WriteString("bufferedn")
 fmt.Printf("写入 %d 个字节n", n4)
 w.Flush()
 f.Close()
}

### 使用 Golang 进行文件入操作 在 Golang 中,可以利用 `os` 和 `fmt` 包来实现向文件中入数据的功能。以下是具体的操作方法: #### 创建并打开文件 为了能够往文件里入内容,首先要创建或打开目标文件。这可以通过调用 `os.OpenFile()` 函数完成,并指定相应的参数以设置访问模式。 ```go file, err := os.OpenFile("example.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Fatalf("failed to open file: %s", err.Error()) } defer file.Close() ``` 这段代码尝试以追加方式 (`O_APPEND`) 打开名为 `"example.txt"` 的文件;如果该文件不存在,则会创建它(`O_CREATE`) 。权限位 `0644` 表明新创建的文件具有读/权限给用户自己,而只读权限给予其他所有人[^1]。 #### 向文件中入字符串 一旦成功打开了文件句柄,就可以使用标准库中的 `fmt.Fprintf()` 或者 `bufio.NewWriter().WriteString()` 方法来进行实际的数据入工作了。 ```go // Option 1: Using fmt package directly. _, err = fmt.Fprintln(file, "This line will be written into the file.") if err != nil { log.Fatal(err) } // Option 2: Use buffered writer which may improve performance when writing large amounts of data. writer := bufio.NewWriter(file) _, err = writer.WriteString("Another way to add content.\n") if err != nil { log.Fatal(err) } else if flushErr := writer.Flush(); flushErr != nil { // Don't forget to call Flush() after done using buffer writers. log.Fatal(flushErr) } ``` 上述两种方案都可以有效地把文本信息保存到磁盘上的文件内。对于较大的数据集来说,推荐采用带缓冲区的方式(即第二种),因为这样可以在一定程度上减少 I/O 操作次数从而提高效率[^2]。 #### 关闭文件资源 无论何时完成了所有的输入输出活动之后都应当记得关闭已经打开过的文件对象,以便释放占用着的相关系统资源。通常情况下,在函数结束前通过 defer 语句安排好这一清理动作是比较好的做法。 ```go defer file.Close() ``` 以上就是关于怎样运用 Go 语言执行基本的文件入任务的一个简单介绍。当然还有更多高级特性等待探索学习!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值