2015-09-10 143 views
0

我正在嘗試編寫java代碼來檢索僅.txt文件,我編寫的代碼檢索目錄及其子目錄中的所有文件。如何添加邏輯來檢索僅.txt文件?從目錄和子目錄中檢索只有txt文件

public List<File> getFiles(String path){ 
    File folder = new File(path); 
    List<File> resultFiles = new ArrayList<File>(); 

    File[] listOfFiles = folder.listFiles(); 

    for(File file: listOfFiles){ 
     if(file.isFile()){ 
      System.out.println(file.getAbsolutePath()); 
     }else if(file.isDirectory()){ 
      resultFiles.addAll(getFiles(file.getAbsolutePath())); 
     } 
    } 

    return resultFiles; 
} 

回答

0

isTextFile(file)在同一if條件爲file.isFile()

public boolean isTextFile(File file) { 

    String fileName = file.getName(); 

    String extension = "txt"; 

    return fileName.endsWith(extension); 
} 

而不是打印absoluteFileName你可以把它添加到resultFiles

編輯

你也可以使用Apache Commons IO,用自己的FileUtils類,這是處理文件非常有幫助。

0

只要檢查文件路徑是否以.txt結尾。

public List<File> getFiles(String path){ 
    File folder = new File(path); 
    List<File> resultFiles = new ArrayList<File>(); 

    File[] listOfFiles = folder.listFiles(); 

    for(File file: listOfFiles){ 
     if(file.isFile() && file.getAbsolutePath().endsWith(".txt")){ 
      System.out.println(file.getAbsolutePath()); 
     }else if(file.isDirectory()){ 
      resultFiles.addAll(getFiles(file.getAbsolutePath())); 
     } 
    } 

    return resultFiles; 

} 
1

試試這個:

if(file.getAbsolutePath().endsWith(".txt")) { 
    // use the file 
} 
1

或可替代的Java 7的方式

public List<File> getFiles(String path){ 
    PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:.txt"); 
    List<File> resultFiles = new ArrayList<File>(); 
    try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get(path))) { 
     for (Path pathEntry : directoryStream) { 
      if (matcher.matches(pathEntry)) { 
       resultFiles.add(pathEntry.toFile()); 
      }  
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
    return resultFiles; 
} 

編輯:只注意到子目錄的要求,堅持到Java 7的方法中,該解決方案地址子目錄,以及。

public List<File> getFiles(String path){ 
    final PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:.txt"); 
    final List<File> resultFiles = new ArrayList<File>(); 
    try { 
     Files.walkFileTree(Paths.get(path), new SimpleFileVisitor<Path>() { 
      @Override 
      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 
       if (matcher.matches(file)) { 
        resultFiles.add(file.toFile()); 
       } 
       return FileVisitResult.CONTINUE; 
      } 
     }); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
    return resultFiles; 
} 
相關問題