IO其实算是Java中比较简单(相比于之后的反射注解框架学习等等)的一个部分,毕竟他本身就是一种方法/机制,只需要多使用多了解,就可以比较熟练的掌握。
实际上IO流是很容易造成误解的,我一开始学习的时候一直以为输入流是向源写入数据,输出流是读出数据的,实际上恰恰相反:程序是从指定源的输入流中读取源中的数据,通过向输出流中写入数据把信息传递到目的地的,简单来说就是输出用来写输入用来读,IO也就是做这个的
我们把流分为字节流与字符流,所有的字节流的抽象类都是In/OutputStream类,该类中所有的方法遇到错误时都会引起IOException异常,这里需要强调一下就是如果需要使用IO操作时最好使用try-catch语句来捕获异常,不然容易一直报错;
一般来说我们操作IO都是在文件对象之上进行的,所以学习好文件对象才会对IO有更多一点的认识。
文件对象:File类,是Java.io包中唯一代表磁盘文件本身的对象
构造方法:
File(String pathname) pathname 文件的抽象路径名(文件的路径+文件名)
File(String parent, String child) parent + child 就是上面的pathname
File(File parent, String child)
三种方式都必须会,日常开发中第一个最常用
注意: 创建一个File对象并没有在磁盘上面创建一个文件(文件夹) 需要调用File中的特殊的方法。
创建一个具体的文件
boolean createNewFile()
- 需要File对象调用:根据File对象中的pathname来创建文件
- 如果文件已经存在,返回false
- 如果文件路径不存在,抛出IO异常
- 此方法只能够创建文件(传统理解的文件,不会创建文件夹)
创建文件夹
boolean mkdir()
- 需要File对象调用:根据File对象中的pathname来创建文件夹
- 如果文件夹已经存在,返回false
- 如果路径不存在,返回false,没有抛出异常
boolean mkdirs()
- 如果路径不存在,会自动先创建路径所需的文件夹
删除文件和目录
boolean delete()
- 需要File对象来调用(把File对象所关联的文件从磁盘上面删除)
- 如果是删除文件夹,必须是空文件夹
- 文件就直接删除
下面通过一个例子来学习一下FileFilter类的方法,该抽象类只有一个accept方法,实现类通过重写accept方法来选择过滤文件的条件,之后再通过listFile方法获取指定文件下的所有文件,这个例子是查询指定文件夹下所有的.mp4文件,我通过重写FileFilter中的accept方法来实现检索,最后使用File类中listFiles方法来获取通过过滤的文件实现目标;
*@Auther:AmazingQing
*@Data:2021/8/20*/
import java.io.File;
import java.io.FileFilter;
//2.定义一个方法,查询指定文件夹下所有的.mp4文件,并测试
public class Homework2 {
public static void main(String[] args) {
File f = new File("D:\\剪影\\导出");
FileFilter ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
String s = pathname.getName().toLowerCase();
if(s.endsWith(".mp4")){
return true;
}
return false;
}
};
File[] fs = f.listFiles(ff);
for (File fn:fs) {
System.out.println(fn);
}
}
}