File类
/*
- java.io.File类
- 代表硬盘上的一个文件或者目录
- 每个File类文件的对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息如:名称、长度、所含文件个数等
- 调用它的方法则可以完成对文件或者目录的常用管理操作例如:创建、删除等操作
- File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法
*/
类中静态方法
1.分隔符:
1-1:File.pathSeparatorChar 与系统有关的路径分隔符
Windows:分号(;) Linux:冒号(:)
(该静态常量字段会根据系统自动自配初始化的取值)
例:
char psc=File.pathSeparatorChar;
System.out.println(psc);
输出结果:;(笔者使用的是window系统)
1-2:File.pathSeparator 同上,但返回类型为String
1-3:File.separatorChar 与系统有关的默认名称分隔符
Windows:反斜杠(\)Linux:正斜杠(/)
(该静态常量字段会根据系统自动自配初始化取值)
例:
char sc=File.separatorChar;
System.out.println(sc);
输出结果:\(Windows系统)
1-4:File.separator(返回String型)
1-5:在开发中,我们推荐使用以上的字段进行相应的分割。如:
Windows系统:C:\develop\a\a.txt
Linux路径:C:/develop/a/a.txt
Java代码路径:“C:”+File.separator+“develop”+File.separator+“a”+File.separator+“a.txt”
在学习期间,为了简化起见,我们很多时候使用相应系统的分隔符,如:java代码路径:d:\Java202\a\a.txt,此路径应用于Windows系统,由于\为转义字符,所以要\
构造方法
**2-1:**File(String pathname);根据字符串创建路径对象
String str="D:\\JavaStudy";
File file=new File(Str);
System.out.println(file);
**注意:**创建File对象,只是把字符串路径封装到File对象中,不考虑路径的存在与否,可以存在,也可以不存在。
提前插入一个方法:boolean exists():判断该路径是否存在
if(file.exists()){
System.out.println("file路径已经存在");
}else{
System.out.println("file路径创建成功");
}
**2-2:**File(String parent,String child)根据父字符串和子字符串的拼接效果创建路径对象
File file2=new File(str,"a");
if(f2.exists()) {
System.out.println("f2路径已存在");
}else {
f2.mkdir(); //创建目录
System.out.println("f2路径创建成功");
}
**2-3:**File(File parent,String child);根据父路径对象和子字符串的连接效果创建路径对象
File file3=new File(file1,"b");
if(f3.exists()) {
System.out.println("f3路径已存在");
}else {
f3.mkdir(); //创建目录
System.out.println("f3路径创建成功");
}
路径
**3-1:**路径不区分大小写
File file4=new File(file,"B");
if(file4.exists()){
System.out.println("file4路径已存在");
}else{
file4.mkdir();//创建目录
System.out.println("file4路径创建成功");
}
输出结果:file4路径已存在
原因:上文的同级目录中已存在目录b,此时创建目录B就会返回true,表示目录已存在
**3-2:**路径可以是文件夹也可以是文件
File file5=new File("f1,"也可以是文件.txt");
if(f5.exists()){
System.out.println("file5路径已存在");
}else{
f5.createNewFile();
System.out.println("file5路径创建成功");
}
绝对路径和相对路径
**4-1:**绝对路径:从盘符开始写起,如前面所举例的均为绝对路径
**4-2:**相对路径:相对于当前某个位置而言的路径。不同类型的情境有不同的相对路径。对于File而言指的是项目名之下,作为项目的子路径而存在
File file6=new File("folder");//相对路径
if(file6.exists()){
System.out.println("file6路径已存在");
}else{
file6.mkdir();//该目录会创建在本工程的同级目录下
System.out.println("f6路径创建成功");
}
方法
获取功能方法
**5-1:**public length();返回此File表示的文件长度
注意:文件夹是没有长度的
**5-2:**public String getAbsolutePath();返回此File的绝对路径名字符串
**5-3:**public String getPath();获取文件相对路径
**5-4:**public String getName();返回由此File表示的文件或目录名称
判断功能方法
**5-5:**boolean exists();此File表示的文件或目录是否实际存在
**5-6:**boolean isDirectory();此File表示的是否为目录
**5-7:**boolean isFile();此File表示的是否为文件
创建删除功能方法
**5-8:**public boolean createNewFile();当且仅当具有该名称的文件尚不存在时,创建一个新的空文件
**5-9:**public boolean delete();删除有此File表示的文件名或目录
**5-10:**public boolean mkdir();创建由此File表示的目录
**5-11:**public boolean mkdirs();创建由此File表示的目录,包括任何必须但不存在的父目录
目录的遍历
**5-12:**public String[]list()返回一个String数组,表示该File目录中所有子文件或目录
**5-13:**public File[] listFiles();返回一个File数组,表示该File目录中的所有子文件或目录
package SE04.n1File;
import java.io.File;
import java.io.FileFilter;
public class Demo03Recursion {
public static void main(String[] args) {
// 打印多层次目录
File f=new File("folder");
print(f);
}
private static void print(File f) {
// TODO 自动生成的方法存根
File[]file =f.listFiles();//获取file中的父目录列表
for (File file2 : file) {//遍历父目录
if(file2.isDirectory()) {//如果是目录
print(file2);//递归进入里层目录
}else if(file2.isFile()) {//如果是文件
System.out.println(file2.getAbsolutePath());//输出文件绝对路径
}
}
}
}
FileFilter过滤器
/*
- Java.io.FileFilter是一个接口,是File的过滤器。
- 该接口的对象可以传递给File类的listFiles(FileFilter o)作为参数,接口中只有一个方法:
- boolean accept(File pathname);测试pathname是否应包含在当前File目录中,符合则返回true
- 接口作为参数,需要传递子类的对象,重写其中的方法。这个地方我们选择匿名内部类的方式比较简单
- accept()方法,参数为File,表示当前File下所有的子文件和子目录。保留住则返回true,过滤掉则返回false
- 通过过滤器的作用,listFiles(FileFilter o)返回的数组元素都是复合条件的
*/
package SE04.n1File;
import java.io.File;
import java.io.FileFilter;
public class Demo04FileFilter {
public static void main(String[] args) {
File f=new File("folder");
print(f);
}
private static void print(File f) {
// TODO 自动生成的方法存根
File[]file =f.listFiles(new FileFilter() {//FileFilter的匿名内部类
//用于过滤出指定的文件类型或文件名
@Override//重写唯一方法
public boolean accept(File pathname) {
boolean flag = false;
if (pathname.isDirectory()) {//判断当前路径是否为目录,如果是目录,进入递归,解析其子目录
print(pathname);
}else {//非目录直接判断文件是否符合要求(这里设置的筛选是png和bmp格式)
flag = pathname.getName().endsWith(".png")||pathname.getName().endsWith(".bmp");
}
return flag;}//返回true则写入File数组
});
for (File file2 : file) {
System.out.println(file2.getAbsolutePath());
}
}
}