File类
File类一般和流一起使用,流操作数据,file类操作文件和文件夹。
它将文件和文件夹封装成类,提供一些方法,如下:
一.基础
1.创建
booleancreateNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false 和写入流不一样,写入流创建文件会覆盖已经存在的文件。
案例 :
File f=newFile("a.txt");
f.createNewFile();
创建一级目录
File dir=newFile("abc");
dir.mkdir();
创建多级目录
dir.mkdirs();
2.删除
booleanf.delete(); 删除失败,返回false,可能不能删除
3.判断 :在判断文件对象是都是文件或者目的时候,必须要先判断该文件对象封装的内容是否存在。
File f=newFile("a.txt");
f.exits();返回boolean 文件是否存在
是否是目录
f.isDirectory();
是否是文件
f.isFile();
是否是隐藏的
f.isHidden();
是否是绝对路径
f.isAbsolute();
4.获取信息。
getName() //获取名称
getpath() //获取路径
getAbsolutePath() //获取绝对路径
getParent() //获取绝对路径下的父路径,如果获取的是相对路径返回null,如果相对路径中由上一级目录,该目录就是结果。
lastModified()//获取最后一次修改时间
length();//获取体积大小
5.其他
renameTo();改名,重命名,如果修改路径的话,同时路径也会修改
f1.renameTo(f2);
二.重要代码理解:过滤器 ,递归深度遍历 , Properties集合+IO流
(1)过滤器
一个目录文件下可以存储很多种类的文件,使用过滤器,就可以拿到自己想要类型的文件。Java把过滤器封装到FilenameFilter接口中。定义一个类实现他复写accept方法,就可以了。如果下代码:
public class MyFilterJava implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
//
System.out.println(dir+"---"+name);
return name.endsWith(".java");
}
}
这就是一个过滤后缀名为java 过来器。
应用:
public static void listDemo() {
File dir = new File("c:\\");
File[] files = dir.listFiles(new MyFilterJava ());
for(File file : files){
System.out.println(file);
}
}
(注意:将过滤器作为参数传个listFiles,那么他返回的文件对象就只有后缀名为java的文件)
(2)递归深度遍历
(遍历文件目录,遍历文件夹,删除文件,删除文件夹)
(a)文件下的目录遍历:(基础)
. listFiles();返回当前路径下的文件对像(不包括子目录
FIle dir=new File("c:\\");
File[] files=dir.listFiles();
for(File f : files)
{
System.out.println(f.getname());
}
(b).遍历文件夹下的目录
列出指定目录下所有内容:使用递归,函数自己调用自己。
public static void main(String[] args) {
File dir = new File("c:\\a");
getAllFiles(dir);
public static void getAllFiles(File dir) {
//封装对象
File[] files =dir.listFiles();
// System.out.println(files);
//遍历,因为要在遍历中操作 ,我们就不用增强for循环。 是数字,有角标,可以循环
for(int x=0;x<files.length;x++){
if(files[x].isDirectory()){
getAllFiles(files[x]);
}else
System.out.println(files[x].getName());
}
}
(c)删除文件
FIle dir=new File("c:\\");
File[] files=dir.listFiles();
for(File f : files)
{
f.delete();
}
(d)删除文件夹:
public static void main(String[] args) {
File dir = new File("c:\\a");//a是一个多极目录
//怎么将这个目录删掉。
DeleteFiles(dir);
}
private static void DeleteFiles(File dir) {
/*思路:在java中删除是从里往外删除的,所以我们要遍历这个目录,用递归的思想从里面往外删。
* 1.遍历目录。
* 2.遍历出来的还是目录就在遍历一次,不是目录就删掉。
* */
//获取目录下的文件和文件夹
File[] files =dir.listFiles();
//遍历判断删除
for(int x=0;x<files.length;x++){
//判断是不是目录
if(files[x].isDirectory()){
DeleteFiles(files[x]);
}else
files[x].delete();
}
dir.delete();
}
(注意) 文件的删除是从里往外删的(重点)
(3)Properties集合+IO流
Properties是什么?
一个可以将键值进行持久化存储的对象。Map--Hashtable的子类。
特点:1.就是可以从流中读数据,也可以将数据些入流中。
2.可以持久化存储数据。(存入硬盘中)
3.键值都是字符串。
4.一般用于配置文件。
有3个常用的方法:
load():将流中的数据加载进集合。
原理:其实就是将读取流和指定文件相关联,并读取一行数据,因为数据是规则的key=value,所以获取一行后,通过 = 对该行数据进行切割,左边就是键,右边就是值,将键、值存储到properties集合中。
|-- store():写入各个项后,刷新输出流。
|-- list():将集合的键值数据列出到指定的目的地。
经典练习:记录一个程序运行次数,超过5次提示注册。