1.什么是文件?
- 文件 : 一般理解文件,例如文本文件 word文件 excel文件 压缩文件 图片 视频,java 文件...
- 文件夹 : 装文件
- 在一个文件夹下面不能够有两个名字一样的文件(A.txt a.txt 也是不能同时存在的)或者文件夹
- 后缀名 : 一般来说通过后缀名判断类型,更改后缀名是否会改变文件中的内容
- 注意:不能够把数据直接写入文件夹,而是写入文件中
文件官方概念:计算机文件是以计算机硬盘为载体存储在计算机上的信息集合[二进制数据]
Java中有一个File类 : 描述的是上面理解的文件和文件夹(目录)
2.File类的使用
2.1构造方法
File(String pathname) pathname 文件的抽象路径名(文件的路径+文件名)
File(String parent, String child) parent + child 就是上面的pathname
File(File parent, String child)
三种方式都必须会,日常开发中第一个最常用
注意: 创建一个File对象并没有在磁盘上面创建一个文件(文件夹) 需要调用File中的特殊的方法。
2.2常用方法
1.创建一个具体的文件
boolean createNewFile()
- 需要File对象调用:根据File对象中的pathname来创建文件
- 如果文件已经存在,返回false
- 如果文件路径不存在,抛出IO异常
- 此方法只能够创建文件(传统理解的文件,不会创建文件夹)
2.创建文件夹
boolean mkdir()
- 需要File对象调用:根据File对象中的pathname来创建文件夹
- 如果文件夹已经存在,返回false
- 如果路径不存在,返回false,没有抛出异常
boolean mkdirs()
- 如果路径不存在,会自动先创建路径所需的文件夹
3.删除文件和目录
boolean delete()
- 需要File对象来调用(把File对象所关联的文件从磁盘上面删除)
- 如果是删除文件夹,必须是空文件夹
- 文件就直接删除
4.直接删除文件和文件夹(包括子文件夹和文件的)
public static void delAll(File f){
if(f!=null){
if (f.isFile()) {//文件对象直接删除
f.delete();
}else {//此时是文件夹
File[] files = f.listFiles();
if(files.length!=0){
//遍历数组
for (File file : files) {
delAll(file);
}
}
}
f.delete();
}
}
5.判断系列方法
boolean exists() 测试此抽象路径名表示的文件或目录是否存在
boolean isDirectory() 判断是否是一个目录
boolean isFile() 判断是否是一个文件
.... 其它的请自行查找File的API文档
6.判断系列方法存在的意义
File f = new File("Hello.java");
f 指向的是文件还是目录?
不能够确定File类描述的包括文件和目录,应该调用上面的判断方法
7.为什么需要判断 : 对文件和目录的操作不一样!
- 需要把一些数据 “我就是数据我就是数据” 保存起来, 保存到文件而不是目录
- 需要得到一个目录下面的所有的File对象,应该是目录来调用
8.基本的list方法
- static File[] listRoots() 列出可用的文件系统根(操作系统上面的盘符)
- 作用: 先判断电脑上有哪些盘符,然后在制定的位置创建文件夹或者文件
- String[] list() 返回当前的文件夹对象下面一层的所有的文件(文件夹)的名字
- File[] listFiles() 返回当前的文件夹对象下面一层的所有的文件(文件夹)(File对象的形式
3.过滤器
File中提供了可以达到过滤效果的方法,我们可以在调用的时候指定具体的过滤器来得到我们想要的一个目录下面的东西。由于我们想要什么东西Java本身不知道的,所有它仅仅给我们提供了一个过滤器的接口(FilenameFilter, FileFilter)而已,需要我们自己自定义实现过滤器接口来定义过滤器类,具体的使用查阅File中的如下方法:
String[] list(FilenameFilter filter)
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter filter)
一,自定义类实现接口
public static void main(String[] args) {
File file = new File("d:/lvtest");
Filter1 filter1 = new Filter1("txt");//过滤后缀为txt的文件
File[] listFiles = file.listFiles(filter1);//获取d:/lvtest下后缀名为txt的文件
System.out.println(Arrays.toString(listFiles));
}
class Filter1 implements FilenameFilter{
String ends;
public Filter1(String ends) {
super();
this.ends = ends;
}
@Override
public boolean accept(File dir, String name) {//实现父类的方法
return name.endsWith(ends);
}
}
二.匿名内部类
public static void main(String[] args) {
File file = new File("d:/lvtest");
File[] files = file.listFiles(new FileFilter() {//匿名内部类
@Override
public boolean accept(File pathname) {//pathname 获取了d:/lvtest所有文件
return pathname.getName().endsWith("txt");//获取d:/lvtest所有后缀为txt的文件
}
});
System.out.println(Arrays.toString(files));
}