Class File
1. 构造
//表示在G盘下操作文件,注意转义字符\
File g = new File("g:\\");
2. File数组
File[] files;
3. 创建文件/目录
createNewFile()
当且仅当具有此名称的文件尚不存在时,创建由此抽象路径名命名的新空文件。返回true表示文件已被创建, false表示文件已存在。mkdir()
创建此抽象路径名指定的目录。mkdirs()
创建此抽象路径名指定的目录,包括任何必需但不存在的父目录。
File file1 = new File("g://test/readme.md");
System.out.println(file1.createNewFile());
//创建文件readme.md,返回true
File file2 = new File("g:/test/tt/123");
System.out.println(file2.mkdirs());
//test下创建目录tt,创建目录123, 返回true
4. 删除文件(慎用)
delete()
除此抽象路径名表示的文件或目录。deleteOnExit()
请求在虚拟机终止时删除此抽象路径名表示的文件或目录。
5. 文件更名
renameTo()
重命名此抽象路径名表示的文件
6. 获取文件信息
String getName()
返回此抽象路径名表示的文件或目录的名称。String getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。String getCanonicalPath()
返回此抽象路径名的规范路径名字符串。String getParent()
返回此抽象路径名父项的路径名字符串,如果此路径名未指定父目录,则返回 null。String toString()
返回此抽象路径名的路径名字符串。
File file = new File("g://test");
file.getName();
//01.txt
file.getAbsolutePath();
//g:\test\01.txt
file.getCanonicalPath();
//G:\test\01.txt
file.getParent();
//g:\test
File file2 = new File("g:/test/tt/123");
System.out.println(file2.toString());
//g:\test\tt\123
7. 返回目录下的文件和目录信息
listFiles()
返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件名和目录list()
输出目录下文件及目录绝对地址
File file = new File("g://test");
File[] files = file.listFiles();
for (File f:files) {
System.out.println(f.getAbsolutePath());
}
// g:\test\01.txt
// g:\test\89.txt
// g:\test\de
// g:\test\xc
输出目录下文件及目录名
File file = new File("g://test");
String[] filesName = file.list();
for (String fileName:filesName) {
System.out.println(fileName);
}
// 01.txt
// 89.txt
// de
// xc
7.1 遍历目录及子目录包含的所有文件
- forEach, 需要判断子文件夹是否为空,否则会抛出空指针异常
- file.isFile()判断是否是文件,输出为true则是文件,输出false是文件夹
public static void listFiles(File[] files){
if(files!=null && files.length>0){
for (File file: files) {
if(file.isFile()){
//如果是文件,判断后缀名是否为.mobi
if(file.getName().endsWith(".mobi")){
//判断文件是否大于50MB
if(file.length()>50*1024*1024){
System.out.println("找到了mobi文件"+file.getAbsolutePath());
//删除该文件
file.delete();
}
}
}else{
//如果是文件夹,嵌套读取其中的文件
File[] files2 = file.listFiles();
listFiles(files2);
}
}
}
}
7.2 使用FileFilter过滤文件
- 方法一:
public static void listFiles(File file){
//1.创建一个过滤器 并 描述规则(见下面 MOBIFileFilter类 继承 FileFilter 接口)
FileFilter filter = new MOBIFileFilter();
//2.通过文件获取子文件夹
File[] files = file.listFiles(filter);
if(files!=null && files.length>0){
for (File f:files) {
if(f.isDirectory()){
listFiles(f);
}else {
System.out.println("发现一个mobi文件:"+f.getAbsolutePath());
}
}
}
}
//只过滤出.mobi文件和文件夹(返回true);其他文件返回false,即不会出现在files数组中
static class MOBIFileFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
if(pathname.getName().endsWith(".mobi") || pathname.isDirectory())
return true;
return false;
}
}
- 方法二,创建过滤器同时使用匿名方法,规定过滤规则:
public static void listFiles(File file){
FileFilter filter = new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.getName().endsWith(".mobi") || pathname.isDirectory())
return true;
return false;
}
};
File[] files = file.listFiles(filter);
if(files!=null && files.length>0){
for (File f:files) {
if(f.isDirectory()){
listFiles(f);
}else {
System.out.println("发现一个mobi:"+f.getAbsolutePath());
}
}
}
}
- 方法三 使用
listFiles(FileFilter filter)
方法,读取目录下文件时就开始过滤
public static void listFiles(File file){
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.getName().endsWith(".mobi") || pathname.isDirectory())
return true;
return false;
}
});
if(files!=null && files.length>0){
for (File f:files) {
if(f.isDirectory()){
listFiles(f);
}else {
System.out.println("发现一个mobi:"+f.getAbsolutePath());
}
}
}
}
8. 获取文件大小
length()
返回此抽象路径名表示的文件的长度。
//01.txt大小为69字节
File file1 = new File("g:/test/01.txt");
System.out.println(file1.length());
//69
9. 比较
int compareTo()
按字典顺序比较两个抽象路径名boolean equals()
测试此抽象路径名与给定对象的相等性。boolean exists()
测试此抽象路径名表示的文件或目录是否存在。
File file1 = new File("G:\\UOB Y2TB1\\Activity\\BUDS1");
System.out.println(file1.exists());
//true
10. 判断是否为文件/目录
isFile()
测试此抽象路径名表示的文件是否为普通文件。isDirectory()
测试此抽象路径名表示的文件是否为目录。isHidden()
测试此抽象路径名指定的文件是否为隐藏文件。
11. 权限判断
boolean canExecute()
测试应用程序是否可以执行此抽象路径名表示的文件。boolean canRead()
测试应用程序是否可以读取此抽象路径名表示的文件。boolean canWrite
测试应用程序是否可以修改此抽象路径名表示的文件。
System.out.println(f.canExecute());
//true
System.out.println(f.canRead());
//true
System.out.println(f.canWrite());
//true
12. 设置操作权限
setExecutable(boolean executable)
一种方便的方法,用于设置此抽象路径名的所有者执行权限。setLastModified(long time)
设置此抽象路径名指定的文件或目录的上次修改时间。setReadable(boolean readable)
一种方便的方法,用于设置此抽象路径名的所有者读取权限。setReadOnly()
标记此抽象路径名指定的文件或目录,以便仅允许读取操作。setWritable(boolean writable)
一种方便的方法,用于设置此抽象路径名的所有者写入权限。
fied(long time)```设置此抽象路径名指定的文件或目录的上次修改时间。
setReadable(boolean readable)
一种方便的方法,用于设置此抽象路径名的所有者读取权限。setReadOnly()
标记此抽象路径名指定的文件或目录,以便仅允许读取操作。setWritable(boolean writable)
一种方便的方法,用于设置此抽象路径名的所有者写入权限。