1. 目录文件操作
创建File对象,后续操作皆基于File,而不是String路径
import java.io.File;
import java.io.FilenameFilter;
File dir = new File("C:\\Users\\Desktop"); //目录
File file = new File("C:\\Users\\Desktop\\text.docx"); //文件
File dir_file = new File("C:\\Users\\zx\\Desktop","text.docx"); //分开写
File Dir_file = new File(dir,"text.docx"); //分开写,但是目录是FIle类型,
1.1. 查看
File file = new File("C:\Users\Desktop\text.docx");
名称路径
- 获取文件名
File.getName()
// text.docx
- 获取路径
File.getPath()
// C:\Users\Desktop
- 绝对路径文件名
File.getAbsoluteFile()
C:\Users\Desktop\text.docx
-File.getAbsolutePath()
同上
- 父目录(完整路径)
- File.getParent()
空间
- .getTotalSpace() //总空间
- .getUsableSpace() //已用空间
- .getFreeSpace() //剩余空间
修改时间
- .lastModified() //上次修改时间
大小
- .length() //文件大小
1.2. 增删改判
创建
- File.createNewFile(); //创建file对象指向的文件
- boolean File.mkdir(); //创建定义的目录,返回是否创建成,
//需要有权限,目标文件夹已存在也会失败
删除
- .delete(); //删除文件
修改
- 修改权限
.setReadOnly() //改为只读
.setExecutable(true) // 修改为可执行,参数false则不可执行
.setExecutable(true, true) // 第一个参数同上,第二个是否只有拥有者有权限
.setReadable(true) //添加可读权限, 同样可接收第二个参数
.setWritable(true) //添加可写权限, 同样可接收第二个参数
-
重命名或移动文件,同mv
- boolean File.renameTo(File dest); //现有File命名或移动成括号里的File,返回成功或失败
- new File(fileDir+"/"+name).renameTo(new File(fileDir+"/"+englishName));
-
路径拼接
- File类型
- File file2 = new File(directory, fileName);
- Path类型
- Path path = Paths.get(directory, fileName);
- File类型
判断
.exists() //是否存在
.isDirectory() //判断是否是目录
.isFile() //是否是文件
.isHidden() //是否隐藏
.isAbsolute() //是否绝对路径
权限判断
.canRead(); //是否可读
.canWrite(); //是否可写
.canExecute() //是否可执行
1.3. 遍历筛选
① 遍历
String[] files = dir.list(); //获取当前目录下,全部的目录和文件,只有名称没有路径, 字符串类型
list(FilenameFilter) //list可接收一个FilenameFilter过滤器
File[] fileObj = dir.listFiles(); //同上, File类型, 直接打印有路径
listFiles() //可接收两种过滤器
② 筛选
import java.io.FilenameFilter;
import java.io.FileFilter;
实现这两个接口,构造过滤器, 两个接口区别是,accept方法不同
FilenameFilter
boolean accept(File dir, String name)
FileFilter
boolean accept(File pathname)
io
nio
2. 执行系统命令
2.1. Runtime
windows命令要用"cmd /c "开头
linux命令可以直接写,或者以bash等shell开头
2.1.1. exec基础版
使用系统默认环境变量,在当前文件所在目录执行命令
private List exeCmd(){
String[] command={"cmd","/c","dir"};
List result = new ArrayList<>();
try {
Process process = Runtime.getRuntime().exec(command);
//exec重构版 exec(String[] 命令,String[] 环境变量, File 要执行命令的目录 )
InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = "";
while ((line = bufferedReader.readLine()) != null) {
result.add(line);
}
} catch (Exception e) {
log.warn("{}",e);
}
return result;
}
2.1.2. exec加强版
可传入环境变量和要执行命令的目录
private List exeCmd(String[] command,String[] envp,File path){
List result = new ArrayList<>();
try {
Process process = Runtime.getRuntime().exec(command,envp,path);
...