go读写文本文件

一、文件读取

1. 将整个文件读取到内存中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
 
import (
    "flag"
    "fmt"
    "io/ioutil"
)
 
func main() {
    //从命令行标记参数中获取文件路径
    fptr := flag.String("fpath", "test.txt", "the file path to read from")
    flag.Parse()
    data, err := ioutil.ReadFile(*fptr)
    if err != nil {
        fmt.Println("File reading error: ", err)
    }
    fmt.Println(string(data))
}

  

2. 分块读取文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main
 
import (
    "bufio"
    "flag"
    "fmt"
    "io"
    "log"
    "os"
)
 
func main() {
    fptr := flag.String("fpath", "test.txt", "the file path to read from")
    flag.Parse()
 
    f, err := os.Open(*fptr)
    if err != nil {
        log.Fatal(err)
    }
    defer func() {
        if err := f.Close(); err != nil {
            log.Fatal(err)
        }
    }()
    r := bufio.NewReader(f)
    b := make([]byte, 10)
    for {
        _, err := r.Read(b)
        if err != nil {
            if err == io.EOF {
                break
            }
            log.Fatal(err)
        }
        fmt.Println(string(b))
    }
}

  

3. 逐行读取文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main
 
import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)
 
func main() {
    fptr := flag.String("fpath", "test.txt", "the file path to read from")
    flag.Parse()
 
    f, err := os.Open(*fptr)
    if err != nil {
        log.Fatal(err)
    }
    defer func() {
        if err = f.Close(); err != nil {
            log.Fatal(err)
        }
    }()
    s := bufio.NewScanner(f)
    for s.Scan() {
        fmt.Println(s.Text())
    }
    err = s.Err()
    if err != nil {
        log.Fatal(err)
    }
}

  

二、文件写入

1. 将字符串写入文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main
 
import (
    "fmt"
    "log"
    "os"
)
 
func main() {
    f, err := os.Create("test2.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer func() {
        if err = f.Close(); err != nil {
            log.Fatal(err)
        }
    }()
    l, err := f.WriteString("Hello world")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(l, " bytes written successfully!")
}

  

2. 将字节写入文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main
 
import (
    "fmt"
    "log"
    "os"
)
 
func main() {
    f, err := os.Create("test2.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer func() {
        if err = f.Close(); err != nil {
            log.Fatal(err)
        }
    }()
    d := []byte{104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100}
    l, err := f.Write(d)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(l, " bytes written successfully!")
}

  

3. 追加到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
 
import (
    "fmt"
    "log"
    "os"
)
 
func main() {
    f, err := os.OpenFile("test3.txt", os.O_APPEND|os.O_WRONLY, 0644)
    if err != nil {
        log.Fatal(err)
    }
    defer func() {
        if err = f.Close(); err != nil {
            log.Fatal(err)
        }
    }()
    _, err = fmt.Fprintln(f, "Hello, my name is jet.")
    if err != nil {
        log.Fatal(err)
    }
}

  

 

posted @   疯一样的狼人  阅读(2529)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示