判断文件是否存在

os.Stat函数有两个返回值,一个是文件信息,一个是err,通过err我们可以判断文件是否存在。os.Stat()方法用于获取文件属性,示例如下

package collector

import (
"fmt"
"os"
"testing"
)

func TestRDSFileInfo(t *testing.T) {
var filePath = `/root/go/src/node_mysqld_exporter/mysqld_exporter.go`
_, err := os.Stat(filePath)
if err == nil {
fmt.Println("file exist")
} else if os.IsNotExist(err) {
fmt.Println("file not exist")
} else {
fmt.Println(err)
}

fileInfo, err := os.Stat(filePath)
if err != nil {
fmt.Println(err)
}
fmt.Println(fileInfo.Name()) //应用商店.txt
fmt.Println(fileInfo.IsDir()) //false 判断是否是目录
fmt.Println(fileInfo.ModTime()) //2019-12-05 16:59:36.8832788 +0800 CST 文件的修改时间
fmt.Println(fileInfo.Size()) //3097 文件大小
fmt.Printf("文件大小:%d \n", fileInfo.Size())
fmt.Println(fileInfo.Mode()) // -rw-rw-rw- 读写属性
fmt.Println(fileInfo.Sys()) //&{32 {2160608986 30778972} {2160608986 30778972} {1375605524 30780234} 0 3097}

}

执行测试

Running tool: /usr/bin/go test -timeout 30s -run ^TestRDSFileInfo$ github.com/prometheus/mysqld_exporter/cmd/collector

=== RUN TestRDSFileInfo
file exist
mysqld_exporter.go
false
2022-10-20 10:34:25.378 +0800 CST
11268
文件大小:11268
-rw-r--r--
&{64769 176132541 1 33188 0 0 0 0 11268 4096 24 {1666233265 458000000} {1666233265 378000000} {1666233265 378000000} [0 0 0]}
--- PASS: TestRDSFileInfo (0.00s)
PASS
ok github.com/prometheus/mysqld_exporter/cmd/collector 0.011s


> 测试运行完成时间: 2022/10/20 11:13:54 <