一、File类:
专门用于描述系统中文件或者文件夹的对象。
可以用于操作文件或者文件夹的属性信息。
1,获取文件信息。
获取名称,
获取路径。
获取大小。
获取时间。
...
2,判断。
是只读的不?
是隐藏的不?
3,文件的创建和删除以及该文件是否存在,文件对象自己最清楚。
具体创建,删除,是否存在等功能。
File中构造时,指定的路径可以是存在的,也可以是不存在的。
//将c盘下的demo.txt封装成file对象。
File f1 = new File("c:\\demo.txt");
//将c盘下的abc文件夹封装成file对象。
File f2 = new File("c:\\abc");
File f5 = new File("c:\\abc\\ahha\\a.txt");//windows上使用。
File f6 = new File("c:"+ File.separator+"abc"+ File.separator+"ahha"+ File.separator+"a.txt");//可以在任何平台都可以使用。 File.separator是名称分隔符,在windows系统上是双反斜杠\\
private static final String NAME_SEPARATOR = File.separator;也可以这样自定义。
二、file类方法
1、获取名称
File file = new File("abc");
String name = file.getName();//获取名称
String absPath = file.getAbsolutePath();//获取绝对路径。无论file中封 装的是什么,获取到的都是绝对的。全路径。
String path = file.getPath();//获取路径。获取的是file中封装的内容。
String dir = file.getParent();//获取父目录。
2、大小
long len = file.length();
long len2 = file.getTotalSpace();获取文件所在盘符的空间大小
3、获取最后一次修改的时间
long time = file.lastModified();
//为了知道具体的时间,需要进行转换。
//1,将time毫秒值转成Date对象。//2,对Date对象进行格式化。
Date d = new Date(time);
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
String str_time = format.format(d);
System.out.println(str_time);
4、判断
isHidden()是不是隐藏的
isDirectory()是不是一个目录
5、创建和删除文件和文件夹
对于文件的创建和删除
File file = new File("c:\\2.txt");
//1,创建。
boolean b = file.createNewFile();
如果文件不存在,就创建。如果文件存在,就不创建。输出流流会覆盖,如果不覆盖,需要在构造函数中加入true参数。续写。
//2,删除。
boolean b = file.delete();
//3,是否存在。
boolean b = file.exists();
对于文件夹的创建和删除
创建文件夹。
File dir = new File("c:\\abc");
boolean b = dir.mkdir();创建一级文件夹
File dir = new File("c:\\abc\\a\\b\\c");
boolean b = dir.mkdirs();创建多级文件夹
删除文件夹
boolean b = dir.delete();从里往外删,删完内容才能删目录
要判断file中封装的是文件还是目录必须有前提,必须存在。用exists进行判断。
//if(file.exists() && file.isFile())
6、虚拟机退出时再删除deleteOnExit()
File f1 = new File("c:\\haha.jpg");
// file.deleteOnExit();虚拟机退出时会自动删除f1文件,因为如下
//流对象正在操作这个文件。。
//file.delete();//此时就会发生了异常
7、对文件进行重命名
File f1 = new File("c:\\haha.jpg");
File f2 = new File("d:\\xixi.jpg");
f1.renameTo(f2);将haha.jpg更名为xixi.jpg并从c盘移到d盘。 有一个剪切动作。
8、列出根目录 系统的盘符
File[] roots = File.listRoots();列出系统根
for(File root : roots){对盘符进行遍历
System.out.println(root);
}
三、过滤器
File类中的list()方法 返回的是字符串数组。
String[] names = file.list();//将指定目的下的文件或者文件夹的名称存储到字符串数组中,包含隐藏文件。
list(FilenameFilter filter)过滤出满足过滤器的文件和目录的路径字符串存储到字符串数组中并返回
FilenameFilter是一个接口。此接口的实例可用于文件名过滤器
代码如下:
public class FilterByJavaFile implements FilenameFilter {
public boolean accept(File dir, String name) {
return name.endsWith(".java");返回以.java结尾的文件名
}
}
而listFiles()方法 返回的是文件对象数组。将目录下的文件或文件夹都封装成文件对象。
listFiles(FileFilter filter)文件过滤器
将隐藏的文件过滤出来
File[] files = file.listFiles(new FilterByHidden());
for(File f : files){
System.out.println(f);
}
}
隐藏过滤器
public class FilterByHidden implements FileFilter {
public boolean accept(File pathname) {
return pathname.isHidden();
}
}
可以更改结尾条件的过滤器
public class FilterBySuffix implements FilenameFilter {
private String suffix;
public FilterBySuffix(String suffix) {
super();
this.suffix = suffix;
}
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
四、递归
递归就是函数自身调用自身(直接或者间接)
1,一定要定义条件。 否则就是StackOverflowError栈内存溢出
2,一定要注意递归次数。不宜过多,否则也会栈内存溢出