Go 常用文件操作

发布于:2024-06-29 ⋅ 阅读:(10) ⋅ 点赞:(0)

查找文件/目录

os.Stat(String)

组合路径

dir, _ := homedir.Dir()
filename := args[0]
path := filepath.Join(dir, filename)

homedir.Dir()为home根目录。

filepath.Join 会自动处理分隔符,将目录和文件名组合成文件路径。

检查是否含有后缀.json

strings.HasSuffix(filename, ".json")

创建新文件并写入

f, err := os.Create("/tmp/dat2")

defer f.Close()
d2 := []
{115, 111, 109, 101, 10}

n2, err := f.Write(d2)
n3, err := f.WriteString("writes\n")

f.Sync()

获取文件夹下所有文件

files, err := os.ReadDir(dir)
if err != nil {
    return nil, err
}

var jsonFiles []fs.DirEntry
for _, file := range files {
    if filepath.Ext(file.Name()) == ".json" {
        jsonFiles = append(jsonFiles, file)
    }
}

读取文件

f, err := os.Open(filepath.Join(dir, jsonFile.Name()))
if err != nil {
    fmt.Println(err)
    return
}

defer f.Close()

content, err := io.ReadAll(f)
if err != nil {
    fmt.Println(err)
    return
}

按行读取

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }

    // 检查是否为扫描异常而导致的提前退出
    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
}

按空格分割

package main

import (
    "fmt"
    "strings"
)

func main() {
    line := "This is a sample line"
    words := strings.Split(line, " ")
    fmt.Println(words)
}

按空格分成两部分

package main

import (
    "fmt"
    "strings"
)

func main() {
    line := "This is a sample line"
    parts := strings.SplitN(line, " ", 2)
    fmt.Println(parts)
}

检查一个文件是否存在

// 检查文件是否存在
if _, err := os.Stat(file); os.IsNotExist(err) {
    return file, fmt.Errorf("%s does not exist", file)
}

检查是否为文件夹

fileInfo, err := os.Stat(filepath)

fileInfo.IsDir()

如何将一行的最后一段字符串和前面分开

在Go中,你可以使用strings包中的LastIndex函数来找到最后一个空格的位置,然后使用[:index][index+1:]来分割字符串。以下是一个例子:

package main

import (
	"fmt"
	"strings"
)

func main() {
	line := "This is a sample line"
	lastSpaceIndex := strings.LastIndex(line, " ")
	firstPart := line[:lastSpaceIndex]
	lastPart := line[lastSpaceIndex+1:]
	fmt.Println(firstPart)
	fmt.Println(lastPart)
}

这段代码首先找到最后一个空格的位置,然后使用这个位置来分割字符串。firstPart是最后一个空格之前的部分,lastPart是最后一个空格之后的部分。