查找文件/目录
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
是最后一个空格之后的部分。