java–基础–14–File
1、介绍
用于操作文件和目录(文件夹)
1.1、构造方法:
- File(String pathname):根据一个路径得到File对象
- File(String parent, String child):根据一个目录parent和一个子文件child/目录child 得到File对象
- File(File parent, String child):根据一个parent对象和一个子文件child/目录child得到File对象
1.2、常用方法
- boolean createNewFile():当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
- boolean canRead():测试应用程序是否可以读取此抽象路径名表示的文件。
- boolean canWrite():测试应用程序是否可以修改此抽象路径名表示的文件。
- boolean delete():删除此抽象路径名表示的文件或目录。
- boolean exists():测试此抽象路径名表示的文件或目录是否存在。
- File getAbsoluteFile():返回此抽象路径名的绝对路径名形式。
- String getAbsolutePath():返回此抽象路径名的绝对路径名字符串。
- String getName():返回由此抽象路径名表示的文件或目录的名称。
- String getParent():返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
- File getParentFile():返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
- String getPath():将此抽象路径名转换为一个路径名字符串。
- boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。
- boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件。
- long length():返回由此抽象路径名表示的文件的长度。
- File[] listFiles():返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
- File[] listFiles(FileFilter filter):返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
- String[] list():返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
- String[] list(FilenameFilter filter):返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
- boolean mkdir():创建此抽象路径名指定的目录。
- boolean mkdirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
- boolean renameTo(File dest):重新命名此抽象路径名表示的文件。
- String toString():返回此抽象路径名的路径名字符串。
- URI toURI():构造一个表示此抽象路径名的 file: URI。
- long lastModified():返回此抽象路径名表示的文件最后一次被修改的时间。
2、常用方法 案例
2.1、案例1
// 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
System.out.println("--------createNewFile------------");
File file = new File("e:\\a.txt");
System.out.println("createNewFile:" + file.createNewFile());
//创建文件或者文件夹没写盘符路径,那么,默认在项目路径下
File f2=new File("a.txt");
f2.createNewFile();
//返回此抽象路径名的绝对路径名字符串。
System.out.println(f2.getAbsolutePath());
System.out.println("--------mkdirs------------");
// 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
File file2 = new File("a\\b\\c");
System.out.println("mkdirs:" + file2.mkdirs());
System.out.println(file2.getAbsolutePath());
System.out.println("--------delete------------");
// 删除此抽象路径名表示的文件或目录。
System.out.println(f2.delete());
输出:
--------createNewFile------------
createNewFile:false
F:\developSource\eclipse\workSpace\day19_File\a.txt
--------mkdirs------------
mkdirs:false
F:\developSource\eclipse\workSpace\day19_File\a\b\c
--------delete------------
true
F:\developSource\eclipse\workSpace\day19_File\a.txt
//如果路径名相同,就是改名。 如果路径名不同,就是改名并剪切。
File f1=new File("2.jpg");
f1.createNewFile();
File f2=new File("a\\3.bmp");
System.out.println(f1.renameTo(f2));
输出:
true
![这里写图片描述](https://img-blog.csdn.net/20170405005735090?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdTkyMDc4NjMxMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.2、案例21
// 创建文件对象
File file = new File("a\\3.bmp");
// 测试此抽象路径名表示的文件是否是一个目录
System.out.println("isDirectory:" + file.isDirectory());// false
//测试此抽象路径名表示的文件是否是一个标准文件
System.out.println("isFile:" + file.isFile());// true
//测试此抽象路径名表示的文件或目录是否存在。
System.out.println("exists:" + file.exists());// true
//测试应用程序是否可以读取此抽象路径名表示的文件
System.out.println("canRead:" + file.canRead());// true
//测试应用程序是否可以修改此抽象路径名表示的文件
System.out.println("canWrite:" + file.canWrite());// true
//判断是否隐藏
System.out.println("isHidden:" + file.isHidden());// false
isDirectory:false
isFile:true
exists:true
canRead:true
canWrite:true
isHidden:false
![这里写图片描述](https://img-blog.csdn.net/20170405005735090?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdTkyMDc4NjMxMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.3、案例3
// 创建文件对象
File file = new File("a\\3.bmp");
System.out.println("getPath:" + file.getPath());
// 返回由此抽象路径名表示的文件或目录的名称。
System.out.println("getName:" + file.getName());
// 返回由此抽象路径名表示的文件的长度。
System.out.println("length:" + file.length());
// 返回此抽象路径名表示的文件最后一次被修改的时间。
System.out.println("lastModified:" + file.lastModified());
输出:
getPath:a\3.bmp
getName:3.bmp
length:0
lastModified:1491324885438
2.4、案例4
// * public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
//public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
System.out.println("------ --public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组-----");
File f1=new File("H:\\java");
File[] fArr=f1.listFiles();
for (File f : fArr) {
System.out.println(f);
}
System.out.println("-----public String[] list():获取指定目录下的所有文件或者文件夹的名称数组------");
String[] s=f1.list();
for (String s1 : s) {
System.out.println(s1);
}
输出:
------ --public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组-----
H:\java\apache-maven-3.3.9
H:\java\apache-tomcat-7.0.57
H:\java\apache-tomcat-7.0.57 - bei
H:\java\apache-tomcat-7.0.57 - jenkins-8082
H:\java\apache-tomcat-7.0.57-Img-8081
H:\java\apache-tomcat-maven-hot-7080
H:\java\cache
H:\java\jdk1.7.0_60
H:\java\jre7
H:\java\svn
-----public String[] list():获取指定目录下的所有文件或者文件夹的名称数组------
apache-maven-3.3.9
apache-tomcat-7.0.57
apache-tomcat-7.0.57 - bei
apache-tomcat-7.0.57 - jenkins-8082
apache-tomcat-7.0.57-Img-8081
apache-tomcat-maven-hot-7080
cache
jdk1.7.0_60
jre7
svn
2.5、案例5
// * public String[] list(FilenameFilter filter)
//* public File[] listFiles(FilenameFilter filter)
File file = new File("E:\\aaa");
String[] s=file.list(new FilenameFilter() {
//断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
@Override
public boolean accept(File dir, String name) {
System.out.println(dir+"----"+name);
return new File(dir,name).isFile()&&name.endsWith(".jpg");
}
});
System.out.println("-------");
for (String string : s) {
System.out.println(string);
}
System.out.println("-------");
File[] fArray=file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
System.out.println(dir+"----"+name);
return new File(dir,name).isFile()&&name.endsWith(".jpg");
}
});
for (File file2 : fArray) {
System.out.println(file2.getName());
}
}
输出:
E:\aaa----a.jpg
E:\aaa----b
-------
a.jpg
-------
E:\aaa----a.jpg
E:\aaa----b
a.jpg
![这里写图片描述](https://img-blog.csdn.net/20170405015501150?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdTkyMDc4NjMxMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.6、文件删除
/**
* @ClassName FileOperationTool
* @Description TODO(这里用一句话描述这个类的作用)
* @author feizhou
* @Date 2018年4月20日 下午1:48:14
* @version 1.0.0
*/
public class FileOperationTool {
/**
*
* @Description (删除目录下的所有文件,包括目录)
* @author feizhou
* @Date 2018年4月20日下午2:14:34
* @version 1.0.0
* @param path
* @return
*/
public static void delDirectoryIncludeDirectory(String folderPath) {
folderPath=folderPath.trim();
//删除完里面所有内容
delDirectoryNotIncludeDirectory(folderPath);
File file = new File(folderPath);
//删除空文件夹
file.delete();
}
/**
*
* @Description (删除目录下的所有文件,不包括目录)
* @author feizhou
* @Date 2018年4月20日下午2:14:34
* @version 1.0.0
* @param path
* @return
*/
public static boolean delDirectoryNotIncludeDirectory(String path) {
boolean flag = false;
File file = new File(path);
//文件或者目录不存在
if (!file.exists()) {
return flag;
}
//不是目录
if (!file.isDirectory()) {
return flag;
}
//获取目录下的所有文件名称
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
//如果路径已/结尾, 路径+名称
temp = new File(path + tempList[i]);
} else {
//如果路径不是已/结尾, 路径+/+名称
temp = new File(path + File.separator + tempList[i]);
}
//如果是文件
if (temp.isFile()) {
temp.delete();
}
//如果是目录,递归删除
if (temp.isDirectory()) {
delDirectoryNotIncludeDirectory(path + "/" + tempList[i]);//先删除文件夹里面的文件
delDirectoryIncludeDirectory(path + "/" + tempList[i]);//再删除空文件夹
flag = true;
}
}
return flag;
}
public static void main(String[] args) {
String path="E:\\test\\2222";
delDirectoryIncludeDirectory(path);
}
目录已经删除
可以对比看2222副本
![这里写图片描述](https://img-blog.csdn.net/20180420141751867?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdTkyMDc4NjMxMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)