Java File常见方法、File数组及文件的常见定时删除功能及递归删除功能

File常见方法

使用方法 new File(“路径”)

File file = new File("D:/file/");
1.file.exists // 判断是否存在
2.file.isFile() // 判断是文件
3.file.isDirectory()// 判断是文件夹
4.file.mkdir() //创建单个文件夹
5.file.mkdirs() //创建多个文件夹
6.file.createNewFile() //创建新文件
7.file.getPath() //获取文件路径
8.file.getName() //获取文件名
9.file.getParent() //获取父级路径名
10.file.getParentFile()//获取父级路径新文件
11.renameTo(“新路径”) //移动文件
12.file.delete() // 删除该文件
13.file.list() //获取该路径下的所有文件或文件夹
14.file.listFiles() //获取当前路径下所有的文件
15.File.separator  // 代表“/”,根据系统自动判断

过滤获取File数组文件

根据路径获取当前文件夹下的文件可能存在多个使用数组接受

File []file = delListFile("D:/file/")
 private File[] delListFile(String path) {
        return new File(path).listFiles((File file) ->
                file.isFile()&&  //判断是否为文件
                        file.getName().startsWith("tas_") //文件名称开始字段
                        && file.getName().endsWith(".txt")); // 判断文件后缀
    }

若文件路径不存在

if(!new File("D:/file/").exists()){
new File("D:/file/").mkdirs() // 创建多个
new File("D:/file/").mkdir() // 创建单个
}

若文件不存在,创建文件

1.判断文件是否存在

//不存在进行创建
if(!new File("D:/file/").exists()){
方法一(推荐):
new File("D:/file/").createNewFile();
方法二(若使用会自动创建):
FileOutputStream creatFile = new FileOutputStream(new File("D:/file/")); // 担心问题,需要创建线程需要关闭
creatFile.close();
}

根据时间定时删除File

需求:删除10分钟之前的文件
1具体是功能根据自己可以调整,这里将方法封装为了方法,可以之间搬过去–希望可以为你建房添瓦

//先创建时间
 public static final Logger LOG = LoggerFactory.getLogger(当前的class文件.class);
			String path = "D:/file/"
    		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			 Calendar calendar = Calendar.getInstance();
            calendar.setTime(new Date( System.currentTimeMillis()));
            calendar.add(Calendar.YEAR,0);//当前时间减去一年,即一年前的时间
            calendar.add(Calendar.MONTH, 0);//当前时间前去一个月,即一个月前的时间 ;
            calendar.add(Calendar.DAY_OF_MONTH,0);
            calendar.add(Calendar.HOUR,0);
            calendar.add(Calendar.MINUTE,10);
            calendar.add(Calendar.SECOND,0);
            filterListFile(path ,dateFormat.format(calendar.getTime())); // 此处是公用方法传入参数(路径String,定义好的时间)

2创建方法

private void filterListFile(String sendAddress, String format) { //接收来的路径,日期
        LOG.info("删除日期超时的文件");
        File[] fileArray= delListFile(sendAddress);  // 此处过滤想要的文件,方法见3
        if(fileArray.length>0){
            for (File file : fileArray) {
                String fileData = getCreationTime(file);  // 此处可以获取创建的文件时间,返回string 日期,方法见4
                int result=fileData.compareTo(format);//小<大 (日期格式保持一致)
                // 文件创建时间  《=》 定义时间
                //若 result <0 说明文件创建时间  《 定义时间
                //若 result = 0 说明两者相同
                //若 result >0 说明 文件创建时间 》 定义时间
                if(result<0){
                    System.gc(); // 回收资源
                    boolean delete = file.delete();   //条件为true 执行删除该文件
                    LOG.info("当前删除结果:{}",delete);
                }

            }
        }
    }

3获取所要的文件

   private File[] delListFile(String path) {
        return new File(path).listFiles((File file) ->
                file.isFile()&&  //判断是否为文件
                        file.getName().startsWith("tas_") //文件名称开始字段
                        && file.getName().endsWith(".txt")); // 判断文件后缀
    }

4获取文件的创建日期返回string

 private String getCreationTime(File file) {
        BasicFileAttributes attr = null;
        try {
            Path path =  file.toPath();
            attr = Files.readAttributes(path, BasicFileAttributes.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 创建时间
        Instant instant = attr.creationTime().toInstant();
        String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()).format(instant); 
        return format; // 获取的时间格式需要与对比的保持一致
    }

File文件的写入

为了速度可以使用stream流

   File synFile = new File("D:/file/file.txt");
   String start ="2020-08-08"
 FileOutputStream fileOutputStream = new FileOutputStream(synFile,false);  
 //第二个参数,判断是否进行拼接,false:表示不拼接,每次写入会将原数据清空。
            byte[] b=start.getBytes(); // 获取字节
            fileOutputStream.write(b); //写入传的数组是byte不是Byte
            fileOutputStream.write("\n".getBytes()); // 写一次就执行一次换行
            fileOutputStream.flush();//起到行刷新的功能
            fileOutputStream.close();//写入完毕,关闭流

File文件的读取

为了速度可以使用stream流

   File synFile = new File("D:/file/file.txt");
   String time = null;
        if (synFile.exists()) {  // 判断是否存在
            //获取同步日期
            FileInputStream fileInputStream = new FileInputStream(synFile); // 创建转换流
            byte[] b = new byte[10 * 1024]; //定义一次读取数量
            while((fileInputStream.read(b))!=-1){ //-1:文件无数据
                time = new String(b).trim();
            }
            fileInputStream.close(); //关闭流
        }

递归删除文件

创建思路:创建一个方法和一个在该方法下的一个循环体

@Override
    public void getDelTmpFile() {  // 创建方法
        // 执行删除操作
        delAllFile(path);  //循环体  里面的参数可以在创建方法参数中传递下来
    }
private void delAllFile(String path) { //需要删除路径
        File [] superFile = listFileDel(path);
            for (int i=0;i<superFile.length;i++){
                if(superFile[i].isDirectory()){ // 是文件夹则递归获取
                    delAllFile(superFile[i].getAbsolutePath()); // 递归循环
                }else {
                    superFile[i].delete(); //若是文件直接删除
                }
            }
            new File(path).delete(); // 不管是什么最终删除跟路径
    }

你可能感兴趣的:(知识分享,java,html)