【问题标题】:Get all files modified in last 7 days in a directory in Java获取Java目录中最近7天修改的所有文件
【发布时间】:2016-07-03 22:09:15
【问题描述】:

我想获取过去 7 天内使用 Java 修改过的文件。获得文件后,我需要它来进行其他文件操作。

现在我能够从目录中获取所有文件并执行我的文件操作。请建议我如何获取过去 7 天内修改的文件。

下面是我用来从目录中获取文件并进行文件操作的代码。

String target_dir = "D:/Reports/Project";
        File dir = new File(target_dir);
        File[] files = dir.listFiles();
        int count = 0;
        for (File f : files) {
            if(f.isFile()) {
                BufferedReader inputStream = null;
                FileReader in = null;
                try {
                    // Working Code
                    }catch (Exception e) {                   
                    System.out.println("Error while retreiving files ");                  
                }
                finally {
                    if (inputStream != null) {
                        inputStream.close();
                    }
                }
              }

请提出建议。提前致谢。

【问题讨论】:

    标签: java file-io file-handling


    【解决方案1】:

    试试 FileFilter。

        long weekAgo = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(7);
    
        File directory = new File(target_dir);
        File[] files = directory.listFiles(pathname -> pathname.lastModified() >= weekAgo);
    
        for (File file : files) {
            // Your code
        }
    

    【讨论】:

      【解决方案2】:

      你可以试试这个, 这将肯定帮助你,

      您的导入将仅限于此,

      import java.io.File;
      import java.util.Calendar;
      import java.util.Date;
      import java.util.concurrent.TimeUnit;
      

      .......

      public static void main(String[] args) {
          File f = new File("your-working-directory-path");
      
          Calendar calendar = Calendar.getInstance();
          calendar.add(Calendar.DAY_OF_MONTH, -7);
      
          Date lastDate = calendar.getTime();
      
          System.out.println(lastDate);
      
          for(String file : f.list()){
      
              String filePath = f.getAbsolutePath() + File.separator + file;;
      
              File f1 = new File(filePath);
      
              long diffInDays = getDateDiff(lastDate,new Date(f1.lastModified()),TimeUnit.DAYS);
      
              if(Math.abs(diffInDays) <= 7){
                  // do your stuff here...
              }
          }
      
      }
      
      public static long getDateDiff(Date date1, Date date2, TimeUnit timeUnit) {
          long diffInMillies = date2.getTime() - date1.getTime();
          return timeUnit.convert(diffInMillies,TimeUnit.MILLISECONDS);
      }
      

      【讨论】:

      • 将 f1.lastModified() 替换为 f.lastModified()) 对我有用。
      • @KrishnaD 看到代码应该是 f1.last... 不是 f.last... 还看到我更新 -7 而不是 -5,现在您可以检查是否适合您吗?
      • f1.last... 不适合我。相反 f.last... 工作正常。
      【解决方案3】:
      public static void main(String[] args) throws IOException {
          String dir = "myDirectory";
      
          // cutoff date:
          Instant lastWeek = Instant.now().minus(7, ChronoUnit.DAYS);
      
          // find with filter
          Files.find(Paths.get(dir), Integer.MAX_VALUE,
              (p, a) -> {
                  try {
                      return Files.isRegularFile(p)
                          && Files.getLastModifiedTime(p).toInstant().isAfter(lastWeek);
                  }
                  catch(IOException e) {
                      throw new RuntimeException(e);
                  }
              })
              .forEach(System.out::println);
      }
      

      【讨论】:

        【解决方案4】:

        查看函数 File.lastModifiedDate 中的函数以检查它是否在过去 7 天内。

        【讨论】:

          【解决方案5】:

          使用File 类的lastModified() 方法。这将返回该文件的最后修改时间戳,然后您检查它是否在过去 7 天内。

          【讨论】:

            猜你喜欢
            • 2014-05-29
            • 2020-06-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多