提供了一些文件操作的工具函数,包括文件遍历、文件创建、文件删除等
import "github.com/dengrandpa/jez/filejez"
- FilterMap
- FilterMapWalk
- IsDir
- IsEmptyDir
- FileExists
- DirExists
- OsCreate
- CreateFiles
- OverwriteFiles
- CreateDirs
- CreateFilesWithDirs
- OverwriteFilesWithDirs
- CreateFileWithData
- CopyFile
- FindFileWalk
- FindFileWalkFilter
- Filenames
- FilenamesFilter
- FilenamesBy
- FilenamesWalk
- FilenamesWalkFilter
- FilenamesWalkBy
- DeleteFiles
- DeleteDirs
- DeleteEmptyDirWalk
- DeleteWalkBy
- Zip
- ZipFilter
- Unzip
- ReadAll
- ReadLines
遍历当前目录,对每个文件调用 iteratee,如果返回 true,则将结果放入结果集中。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
list, _ := filejez.FilterMap("dir", func(entry os.DirEntry) (string, bool) {
return entry.Name(), true
})
fmt.Println(list)
// Output:
// [test-file.txt test-file1.txt]
}
返回遍历所有目录、子目录,对每个文件调用 iteratee,如果返回 true,则将结果放入结果集中。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
list, _ := filejez.FilterMapWalk("path", func(path string, entry os.DirEntry) (string, bool) {
return entry.Name(), true
})
fmt.Println(list)
// Output:
// [test-file.txt test-file1.txt]
}
判断是否是目录。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
exist, _ := filejez.IsDir("dir")
fmt.Println(exist)
// Output:
// true
}
判断目录是否为空。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
exist, _ := filejez.IsEmptyDir("dir")
fmt.Println(exist)
// Output:
// true
}
判断文件是否存在。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
exist, _ := filejez.FileExists("path")
fmt.Println(exist)
// Output:
// true
}
判断目录是否存在。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
exist, _ := filejez.DirExists("dir")
fmt.Println(exist)
// Output:
// true
}
等同于 os.Create,创建文件,如果文件已存在,则忽略,使用完毕后需要关闭。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
file, _ := filejez.OsCreate("path")
_ = file.Close()
fmt.Println(filejez.FileExists("path"))
// Output:
// true <nil>
}
创建文件,如果文件已存在,则忽略。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.CreateFiles("path")
fmt.Println(filejez.FileExists("path"))
// Output:
// true <nil>
}
创建文件,如果文件已存在,则覆盖。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.OverwriteFiles("path")
fmt.Println(filejez.FileExists("path"))
// Output:
// true
}
创建目录,包含子目录,如果目录已存在,则忽略。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.CreateDirs("path")
fmt.Println(filejez.DirExists("path"))
// Output:
// true
}
创建文件,如果文件已存在,则忽略,同时创建目录,包含子目录。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.CreateFilesWithDirs("path")
fmt.Println(filejez.FileExists("path"))
// Output:
// true
}
创建文件,如果文件已存在,则覆盖,同时创建目录,包含子目录。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.OverwriteFilesWithDirs("path")
fmt.Println(filejez.FileExists("path"))
// Output:
// true
}
创建文件并写入字符串数据。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.CreateFileWithData("path", "test")
data2, _ := filejez.ReadAll("path")
fmt.Println(data2)
// Output:
// test
}
拷贝文件。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.CopyFile("src", "dst")
res, _ := filejez.ReadAll("dst")
fmt.Println(res)
// Output:
// test
}
遍历目录、子目录,查找文件。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
exist, _ := filejez.FindFileWalk("dir", "test-file.txt")
fmt.Println(exist)
// Output:
// true
}
遍历目录、子目录,查找文件,对每个文件调用 iteratee 函数,如果返回 true,则表示找到了。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
exist, _ := filejez.FindFileWalkFilter("dir", func(path string, entry os.DirEntry) bool {
return entry.Name() == "test-file.txt"
})
fmt.Println(exist)
// Output:
// true
}
返回目录下的文件名切片
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
filenames, _ := filejez.Filenames("dir")
fmt.Println(filenames)
// Output:
// [test-file.txt]
}
遍历目录下的文件,对每个文件调用 iteratee 函数,如果返回 true,则将文件名添加到切片中。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
filenames, _ := filejez.FilenamesFilter("dir", func(path string, entry os.DirEntry) bool {
return true
})
fmt.Println(filenames)
// Output:
// [test-file.txt]
}
遍历目录下的文件,对每个文件调用 iteratee 函数,将返回的字符串添加到切片中。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
filenames, _ := filejez.FilenamesBy("dir", func(path string, entry os.DirEntry) string {
return "by-" + entry.Name()
})
fmt.Println(filenames)
// Output:
// [by-test-file.txt]
}
返回目录下的文件名切片,包含子目录。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
filenames, _ := filejez.FilenamesWalk("dir")
fmt.Println(filenames)
// Output:
// [test-file.txt test-file1.txt]
}
返回目录下的文件,包含子目录,对每个文件调用 iteratee 函数,如果返回 true,则将文件名添加到切片中。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
filenames, _ := filejez.FilenamesWalkFilter("dir", func(path string, entry os.DirEntry) bool {
return true
})
fmt.Println(filenames)
// Output:
// [test-file.txt test-file1.txt]
}
返回目录下的文件,包含子目录,对每个文件调用 iteratee 函数,将返回的字符串添加到切片中。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
filenames, _ := filejez.FilenamesWalkBy("dir", func(path string, entry os.DirEntry) string {
return "by-" + entry.Name()
})
fmt.Println(filenames)
// Output:
// [by-test-file.txt by-test-file1.txt]
}
删除文件。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.DeleteFiles("path")
fmt.Println(filejez.FileExists("path"))
// Output:
// false <nil>
}
删除目录。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.DeleteDirs("path")
fmt.Println(filejez.DirExists("path"))
// Output:
// false <nil>
}
返回删除空目录,包含子目录,例如:/a/b,当删除 b 时,如果 a 也是一个空目录,也会被删除。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.DeleteEmptyDirWalk("dir")
fmt.Println(filejez.DirExists("dir"))
// Output:
// false <nil>
}
递归删除指定目录下的文件和子目录
-
参数:
- dirPath: 目录路径
- iteratee: 遍历函数,用于处理每个文件(不包括目录)的逻辑,接收文件路径和 os.DirEntry 实例作为参数
- withEmptyDir: 可选参数,指定是否删除空目录,默认为 false
-
返回值:
- bool: 当前目录是否已被删除
- error: 错误
-
注意事项:
- 如果要删除空目录,请注意 bool 返回值,错误的 bool 返回值可能导致文件意外删除或空目录删除失败。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
isDelete, _ := filejez.DeleteWalkBy("dir", func(path string, entry os.DirEntry) (bool, error) {
return true, nil
}, true)
fmt.Println(isDelete)
fmt.Println(filejez.DirExists("dir"))
// Output:
// true <nil>
// true <nil>
}
将目录或文件压缩为 zip 文件,如果zip已存在,则会被覆盖。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.Zip("./test-dir-walk", "target")
fmt.Println(filejez.FileExists("target"))
// Output:
// true <nil>
}
对每个文件或目录调用 iteratee 函数,如果返回 true,则将其压缩到 zip 文件中,如果zip文件已存在,则会被覆盖。
package main
import (
"fmt"
"os"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.ZipFilter(".", "target", func(path string, entry os.DirEntry) bool {
return path == "./test-dir-walk"
})
fmt.Println(filejez.FileExists("target"))
// Output:
// true <nil>
}
解压 zip 文件到指定目录,如果目录不存在,则会被创建。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
_ = filejez.Unzip("src", "dst")
fmt.Println(filejez.DirExists("dst"))
// Output:
// true <nil>
}
将文件的所有内容读取为字符串。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
data2, _ := filejez.ReadAll("path")
fmt.Println(data2)
// Output:
// test
}
读取文件的前 n 行,如果 n < 0,则读取所有行。
package main
import (
"fmt"
"github.com/dengrandpa/jez/filejez"
)
func main(){
data2, _ := filejez.ReadLines("path", 1)
fmt.Println(data2)
// Output:
// [test]
}