【Java】(二十四)File类(文件操作,文件夹操作,FileFilter接口);Properties属性集合

本文介绍了Java IO框架中的File类,用于文件和文件夹的操作,包括创建、删除、重命名以及获取文件信息。此外,还讲解了如何使用FileFilter接口进行文件过滤,以及递归遍历文件夹的方法。内容涵盖了文件的增删改查以及属性查询,为文件管理提供了基础支持。
摘要由CSDN通过智能技术生成

继续上一章,学习JavaIO框架
【Java】(二十三)IO框架:流的概念与分类,字节流(对象流【序列化、反序列化】),编码方式,字符流(打印流,转换流)
上一节的学习(字节流,字符流)都是对文件内容的增删改查,无法对文件本身进行重命名删除等操作,因此有File类的实现。

5 File类

  1. 概念:代表物理盘符中的一个文件或者文件夹
  2. 方法:
    public boolean CreateNewFile()当且仅当指定的文件名不存在时创建一个指定的新的、空的文件。创建成功返回true,如果指定文件名已存在返回false。
    public boolean mkdir()创建一个指定路径名的文件夹。当且仅当文件夹被创建时返回true,否则返回false。
    public boolean delete()删除一个指定的文件或文件夹,文件夹必须为空才能被删除。当且仅当指定的文件或文件夹被删除时返回true,否则返回false。
    public boolean exists()检查指定的文件或文件夹是否存在。当且仅当指定的文件或者文件夹存在时返回true,否则返回false。
    public File[] listFiles()列出目录中的所有内容,返回一个指定路径名中的文件数组,如果指定的路径名不代表一个文件夹(目录)就返回null。
    public boolean renameTo(File dest)重命名一个路径名所指定的文件。当且仅当修改操作成功时返回true,否则返回false。

5.1 文件操作

package IO;

import java.io.File;
import java.util.Date;

//文件操作
public class FileText {
    public static void main(String[] args) throws Exception{
        seperator();
        FileOp();
    }

    //1.分隔符
    public static void seperator(){
        System.out.println("路径分隔符"+ File.pathSeparator);// ;
        System.out.println("名称分隔符"+File.separator);// \
    }

    //2.文件操作
    public static void FileOp() throws Exception{
        //2.1创建文件
        File f = new File("E:\\code\\JAVA\\file.txt");//抽象表示的文件和目录的路径名,并没有创建
        if(!f.exists()){//如果文件不存在
            boolean nf = f.createNewFile();//文件名不存在时创建一个指定的新的、空的文件
            System.out.println("创建文件结果:"+nf);
        }

        //2.2删除文件
//        //(1)直接删除
//        Thread.sleep(5000);//睡眠时间,5000毫秒=5s,方便观察
//        f.delete();//运行到这里就删除了

//        //(2)使用jvm退出时删除
//        f.deleteOnExit();//程序结束时删除
//        Thread.sleep(5000);

        //2.3获取文件信息
        System.out.println("文件绝对路径:"+f.getAbsolutePath());
        System.out.println("获取路径:"+f.getPath());
        System.out.println("获取父目录:"+f.getParent());
        System.out.println("获取文件名称:"+f.getName());
        System.out.println("获取文件长度:"+f.length());
        System.out.println("获取文件创建时间:"+new Date(f.lastModified()).toLocaleString());

        //4.判断
        System.out.println("是否可写:"+f.canWrite());
        System.out.println("是否可读:"+f.canRead());
        System.out.println("是否隐藏:"+f.isHidden());
        System.out.println("是否是文件:"+f.isFile());
        System.out.println("是否是文件夹:"+f.isDirectory());
    }
}
/*
路径分隔符;
名称分隔符\
创建文件结果:true
文件绝对路径:E:\code\JAVA\file.txt
获取路径:E:\code\JAVA\file.txt
获取父目录:E:\code\JAVA
获取文件名称:file.txt
获取文件长度:0
获取文件创建时间:2021-10-23 10:31:15
是否可写:true
是否可读:true
是否隐藏:false
是否是文件:true
是否是文件夹:false
 */

Windows支持指定是否只读、隐藏。
在这里插入图片描述

5.2 文件夹操作

package IO;

import java.io.File;
import java.util.Date;

//文件夹操作
public class FilePackText {
    public static void main(String[] args) throws Exception{
        directorOp();
    }
    public static void  directorOp() throws Exception{
        //1.创建文件夹
//        File dir=new File("aaa\\bbb\\ccc");//相对路径创建
        File dir=new File("E:\\code\\JAVA\\aaa\\bbb\\ccc");//绝对路径创建
        if (!dir.exists()) {
            //mkdir();只能创建单级目录
            System.out.println("创建结果:"+dir.mkdirs());//创建多级目录
        }

        //2.删除文件夹
//        //2.1 直接删除(必须为空目录)
//        System.out.println("删除结果:"+dir.delete());
//        //2.2 使用jvm删除
//        dir.deleteOnExit();

        //3.获取文件夹信息
        System.out.println("获取绝对路径:"+dir.getAbsolutePath());
        System.out.println("获取路径:"+dir.getPath());
        System.out.println("获取父目录:"+dir.getParent());
        System.out.println("获取创建时间:"+new Date(dir.lastModified()).toLocaleString());
        System.out.println("文件夹名称:"+dir.getName());

        //4.判断
        System.out.println("是否隐藏:"+dir.isHidden());
        System.out.println("是否是文件:"+dir.isFile());

        //5.遍历文件夹
        File dir2=new File("E:\\code\\JAVA\\");
        String[] files=dir2.list();
        for (String string : files) {
            System.out.println(string);
        }
    }
}
/*
创建结果:true
获取绝对路径:E:\code\JAVA\aaa\bbb\ccc
获取路径:E:\code\JAVA\aaa\bbb\ccc
获取父目录:E:\code\JAVA\aaa\bbb
获取创建时间:2021-10-23 11:03:10
文件夹名称:ccc
是否隐藏:false
是否是文件:false
01.jpg
02.jpg
a.txt
aaa
b.txt
c.txt
file.txt
JavaSE
 */

5.3 文件过滤器(FileFilter接口)

  1. FileFilter接口(public interface FileFilter):boolean accept(File pathname)
  2. 当调用File类中的listFiles()方法时,支持传入FileFilter接口实现类,对获取的文件进行过滤,只有满足条件的文件才可以出现在listFiles()的返回值中。
package IO;

import java.io.File;
import java.io.FileFilter;

//文件过滤器
public class FileFilterText {
    public static void main(String[] args) {
        directorOp();
    }
    public static void  directorOp() {
        File dir = new File("E:\\code\\JAVA\\");
        File[] files1=dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if(pathname.getName().endsWith(".txt")) {
                    return true;
                }
                return false;
            }
        });
        for (File file : files1) {
            System.out.println(file.getName());
        }
    }
}
/*
a.txt
b.txt
c.txt
file.txt
 */

5.4 应用:递归遍历文件夹

package IO;

import java.io.File;

//递归遍历文件夹
public class ListDemo {
    public static void main(String[] args) {
        File dir = new File("E:\\code\\JAVA\\aaa\\");
        listDir(dir);
//        deleteDir(dir);
    }
    //递归遍历文件夹
    public static void listDir(File dir){
        File[] files = dir.listFiles();
        System.out.println("文件夹:"+dir.getAbsolutePath());
        if((files!=null)&&(files.length>0)){//路径非空
            for (File file : files) {
                if(file.isDirectory()){//如果是文件夹递归遍历
                    listDir(file);
                }
                else{
                    System.out.println("文件:"+file.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 {
                    file.delete();
                }
            }
        }
        dir.delete();
    }
}

/*
文件夹:E:\code\JAVA\aaa
文件夹:E:\code\JAVA\aaa\bbb
文件夹:E:\code\JAVA\aaa\bbb\ccc
文件:E:\code\JAVA\aaa\bbb\ccc\a.txt
文件:E:\code\JAVA\aaa\bbb\ccc\b.txt
文件:E:\code\JAVA\aaa\bbb\ccc\c.txt
文件:E:\code\JAVA\aaa\bbb\ccc\你好.txt
 */

6 Properties属性集合

  1. 特点:
    (1)存储属性名和属性值(键值对)。
    (2)属性名和属性值都是字符串类型
    (3)没有泛型。
    (4)和流有关(所以没有整理在集合里面)。Properties可以保存在一个流中或是从一个流中加载.
  2. 方法:
    public String getProperty(String key)根据key在属性列表里查找value,如果原始属性列表找不到就去默认属性列表找。返回key所对应的value。
    public void list(PrintWriter out)将属性列表打印在指定的输出流上,在debug时很有用。
    public Object setProperty(String key,String value)内部调用的是Hashtable的put方法,将key和value成对地保存在属性列表中。返回这个key上一个对应的value,没有就返回null。
package IO;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.Set;

//集合properties的使用
public class PropertiesText {
    public static void main(String[] args) throws Exception{
        //创建集合
        Properties properties = new Properties();

        //添加对象<字符串,字符串>
        properties.put("Java","first");
        properties.put("Python","useful");
        properties.put("C","basic");

        //遍历
        //(1)keySet 略
        //(2)entrySet 略
        //(3)stringPropertyNames()
        Set<String> set=properties.stringPropertyNames();
        for (String string : set) {
            System.out.println(string+" "+properties.getProperty(string));
        }

        //和流有关的方法
        //list
        PrintWriter printWriter=new PrintWriter("E:\\code\\JAVA\\print.txt");
        properties.list(printWriter);
        printWriter.close();
        //store保存
        FileOutputStream fileOutputStream=new FileOutputStream("E:\\code\\JAVA\\s.properties");
        properties.store(fileOutputStream, "NOTES");
        fileOutputStream.close();
        //load加载
        Properties properties2=new Properties();
        FileInputStream fileInputStream=new FileInputStream("E:\\code\\JAVA\\s.properties");
        properties2.load(fileInputStream);
        fileInputStream.close();
        System.out.println(properties2);
    }
}
/*
Java first
Python useful
C basic
{Java=first, Python=useful, C=basic}
 */

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值