IO框架(3)
FileFilter接口
public interface FileFilter
- boolean accept (File pathname)
当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中。
package IO;
import java.io.File;
import java.io.FileFilter;
import java.util.Date;
//File类的使用(2)文件夹操作
public class Demo17 {
public static void main(String[] args) throws Exception{
directoryOpe();
}
public static void directoryOpe()throws Exception{
//1. 创建文件夹
File file = new File("d:\\aaa\\bbb\\ccc");
System.out.println(file);
if (!file.exists()){
//file.mkdir();//只能创建单级目录
System.out.println("创建结果:"+file.mkdirs());//创建多级目录
}
//2. 删除文件夹
//2.1 直接删除(只能删除空目录)
//System.out.println("删除结果:"+file.delete());//只删除最底层的文件夹,也就是ccc
//2.2 推出时JVM删除
// file.deleteOnExit();
// Thread.sleep(5000);
//3. 获取文件夹的信息
System.out.println("获取绝对路径:"+file.getAbsolutePath());
System.out.println("获取路径:"+file.getPath());
System.out.println("获取文件夹名称:"+file.getName());//最底层的名称
System.out.println("获取父目录:"+file.getParent());
System.out.println("获取创建时间:"+new Date(file.lastModified()).toLocaleString());
//4. 判断
System.out.println("是否是文件夹:"+file.isDirectory());
System.out.println("是否隐藏:"+file.isHidden());
//5. 遍历文件夹
File file1 = new File("d:\\");
String[] file2 = file1.list();
System.out.println("========================");
for (String s:file2) {
System.out.println(s);
}
System.out.println("===========================");
//FileFilter接口
File[] files = file1.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.getName().endsWith(".txt")){
return true;
}
return false;
}
});
for (File f:files) {
System.out.println(f.getName());
}
}
}
递归遍历文件夹及递归删除文件夹
package IO;
import java.io.File;
//递归遍历文件夹和递归删除文件夹
public class Demo18 {
public static void main(String[] args) throws Exception{
//listDir(new File("d:\\aaa"));
deleteDir(new File("d:\\aaa"));
}
public static void listDir(File dir){
File[] files = dir.listFiles();
if (files!=null&&files.length>0){
for (File f:files) {
if (f.isDirectory()){
listDir(f);
}else {
System.out.println(f.getAbsolutePath());
}
}
}
}
public static void deleteDir(File dir){
File[] files = dir.listFiles();
if (files!=null&&files.length>0){
for (File file:files) {
if (file.isDirectory()){
deleteDir(file);
}else {
System.out.println(file.getAbsolutePath()+"删除"+file.delete());
}
}
}
System.out.println(dir.getAbsolutePath()+"删除"+dir.delete());
}
}
补充:Properties
Properties:属性集合(继承HashTable)
特点:
- 存储属性名和属性值
- 属性名和属性值都是字符串类型
- 没有泛型
- 和流有关
package IO;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Properties;
//Properties的使用
public class Demo19 {
public static void main(String[] args) throws Exception{
//1. 创建集合
Properties a = new Properties();
//2. 添加数据
a.setProperty("username","张三");
a.setProperty("age","20");
System.out.println(a);
//3. 遍历
//3.1 keySet
for (Object b:a.keySet()) {
System.out.println(b+"----"+a.get(b));
}
System.out.println("==========================");
//3.2 entrySet
for (Map.Entry<Object,Object> c:a.entrySet()) {
System.out.println(c.getKey()+"----"+c.getValue());
}
System.out.println("==========================");
//3.3 stringPropertyNames
for (String d:a.stringPropertyNames()) {
System.out.println(d+"----"+a.getProperty(d));
}
//4. 和流有关的方法
//4.1 list方法
// PrintWriter e = new PrintWriter("d:\\file.txt");
// a.list(e);
// e.close();
//4.2 store方法
// FileOutputStream f = new FileOutputStream("d:\\out.properties");
// a.store(f,"这是注释");
// f.close();
//4.3 load方法
Properties g = new Properties();
FileInputStream h = new FileInputStream("d:\\out.properties");
g.load(h);
h.close();
System.out.println(g);
}
}
总结
流的概念:
- 内存与存储设备之间传输数据的通道。
流的分类:
- 输入流、输出流;字节流、字符流;节点流、过滤流;
序列化、反序列化:
- 将对象通过流写入到文件,或将对象通过流读取到内存,必须实现Serializable接口。
File对象:
- 代表物理盘符中的一个文件或者文件夹。
我所学习的课程是
https://space.bilibili.com/416186032spm_id_from=333.788.b_765f7570696e666f.1
希望想要借鉴的小伙伴在这里收获更多知识(_)