创建文件
func createFile() {
fileName := ""
f, err := os.Create(fileName)
defer f.Close()
if err != nil {
// handle error
} else {
_, err := f.Write([]byte("写入内容"))
if err != nil {
// handle error
}
}
}
读取文件
// 一次性读取所有文件1
func ReadAllOnce(path string) string {
b, e := ioutil.ReadFile("d:/goTest/123.txt")
if e != nil {
fmt.Println("read file error")
return ""
}
return string(b)
}
// 一次性读取所有文件2 2快于1
func ReadAllOnce2(path string) string {
fi, err := os.Open(path)
if err != nil {
panic(err)
}
defer fi.Close()
fd, err := ioutil.ReadAll(fi)
return string(fd)
}
// 一行一行读取
func ReadLineEachTime(path string) []string {
cs := []string{}
fi, err := os.Open(path)
if err != nil {
fmt.Printf("Error: %s\n", err.Error())
return cs
}
defer fi.Close()
br := bufio.NewReader(fi)
for {
a, _, c := br.ReadLine()
if c == io.EOF {
break
}
cs = append(cs, string(a))
}
return cs
}
向文件中写
代码1:
func write2File() {
f, err := os.OpenFile("filepath", os.O_WRONLY|os.O_TRUNC, 0600)
defer f.Close()
if err != nil {
// handle error
} else {
_, err := f.Write([]byte("写入的内容"))
// 或者使用 n3, err := f.WriteString("writes\n")
if err != nil {
// handle error
}
}
}
代码2:
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
d1 := []byte("hello\ngo\n")
err := ioutil.WriteFile("test.txt", d1, 0644)
check(err)
}
判断文件或者文件夹是否存在
// 判断所给路径文件/文件夹是否存在
func Exists(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
// 判断所给路径是否为文件夹
func IsDir(path string) bool {
s, err := os.Stat(path)
if err != nil {
return false
}
return s.IsDir()
}
// 判断所给路径是否为文件
func IsFile(path string) bool {
return !IsDir(path)
}
获取目录中文件
使用ioutil.ReadDir读取目录中的所有目录和文件(当前层级,不包括子目录)
返回数据类型:
type FileInfo interface {
Name() string // base name of the file
Size() int64 // length in bytes for regular files; system-dependent for others
Mode() FileMode // file mode bits
ModTime() time.Time // modification time
IsDir() bool // abbreviation for Mode().IsDir()
Sys() interface{} // underlying data source (can return nil)
}
示例:
func viewDir() {
myfolder := `d:\go_workspace\`
files, _ := ioutil.ReadDir(myfolder)
for _, file := range files {
if file.IsDir() {
continue
} else {
fmt.Println(file.Name())
}
}
}
使用递归获取目录及目录中所有的文件
func listFile(myfolder string) {
files, _ := ioutil.ReadDir(myfolder)
for _, file := range files {
if file.IsDir() {
listFile(myfolder + "/" + file.Name())
} else {
fmt.Println(myfolder + "/" + file.Name())
}
}
}
获取当前项目的目录
func getPwd() {
pwd, err := os.Getwd()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(pwd)
}
获取文件夹中所有文件以及文件的大小
func main() {
dirname := "." + string(filepath.Separator)
d, err := os.Open(dirname)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer d.Close()
fi, err := d.Readdir(-1)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for _, fi := range fi {
if fi.Mode().IsRegular() {
fmt.Println(fi.Name(), fi.Size(), "bytes")
}
}
}
重命名
// 重命名文件
func main() {
originalPath := "./test.txt"
newPath := "test_new.txt"
err := os.Rename(originalPath, newPath)
if err != nil {
log.Fatal(err)
}
}
// 重命名目录
func main() {
originalPath := "test"
newPath := "test_new"
err := os.Rename(originalPath, newPath)
if err != nil {
log.Fatal(err)
}
}
判断某个文件的读写权限
func main() {
//Write permission
file, err := os.OpenFile("./test.txt", os.O_WRONLY, 0666)
if err != nil {
if os.IsPermission(err) {
log.Println("Error: Write permission denied.")
}
}
file.Close()
//Read permission
file, err = os.OpenFile("./test.txt", os.O_RDONLY, 0666)
if err != nil {
if os.IsPermission(err) {
log.Println("Error: Read permission denied.")
}
}
file.Close()
}