2012-09-20 47 views
2

我需要編寫一個程序來讀取stdin及其所有子文件夾中的文件夾路徑,然後根據文件擴展名打印出文件數量。以遞歸方式讀取文件夾中的所有文件Java

java Summary -r <path>

輸出需要的樣子:

txt: 
    number of files: 5 
    combined size: 1202131 
    largest file: 729224 
    smallest file: 12323 
pdf: 
    number of files: 2 
    etc... 

有人可以幫我這個

如下它會被編譯?我不知道如何處理它。

+0

您使用的是什麼java版本? – kritzikratzi

回答

4

你可以像這樣啓動遞歸讀取文件

public void listFilesForFolder(final File folder) { 
    for (final File fileEntry : folder.listFiles()) { 
     if (fileEntry.isDirectory()) { 
      listFilesForFolder(fileEntry); 
     } else { 
      System.out.println(fileEntry.getName()); 
     } 
    } 
} 

此代碼是由@rich。

其餘的細節是你必須解決的問題。

你可以看到Read all files in a folder更多細節

0

東西呈三角此代碼(從http://www.javapractices.com/topic/TopicAction.do?Id=68):

在JDK 7:

import java.io.IOException; 
import java.nio.file.FileVisitResult; 
import java.nio.file.FileVisitor; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.SimpleFileVisitor; 
import java.nio.file.attribute.BasicFileAttributes; 

/** Recursive listing with SimpleFileVisitor in JDK 7. */ 
public final class FileListingVisitor { 

    public static void main(String... aArgs) throws IOException{ 
    String ROOT = "C:\\test"; 
    FileVisitor<Path> fileProcessor = new ProcessFile(); 
    Files.walkFileTree(Paths.get(ROOT), fileProcessor); 
    } 

    private static final class ProcessFile extends SimpleFileVisitor<Path> { 
    @Override public FileVisitResult visitFile(
     Path aFile, BasicFileAttributes aAttrs 
    ) throws IOException { 
     System.out.println("Processing file:" + aFile); 
     return FileVisitResult.CONTINUE; 
    } 

    @Override public FileVisitResult preVisitDirectory(
     Path aDir, BasicFileAttributes aAttrs 
    ) throws IOException { 
     System.out.println("Processing directory:" + aDir); 
     return FileVisitResult.CONTINUE; 
    } 
    } 
} 
老年

import java.util.*; 
import java.io.*; 

/** 
* Recursive file listing under a specified directory. 
* 
* @author javapractices.com 
* @author Alex Wong 
* @author anonymous user 
*/ 
public final class FileListing { 

    /** 
    * Demonstrate use. 
    * 
    * @param aArgs - <tt>aArgs[0]</tt> is the full name of an existing 
    * directory that can be read. 
    */ 
    public static void main(String... aArgs) throws FileNotFoundException { 
    File startingDirectory= new File(aArgs[0]); 
    List<File> files = FileListing.getFileListing(startingDirectory); 

    //print out all file names, in the the order of File.compareTo() 
    for(File file : files){ 
     System.out.println(file); 
    } 
    } 

    /** 
    * Recursively walk a directory tree and return a List of all 
    * Files found; the List is sorted using File.compareTo(). 
    * 
    * @param aStartingDir is a valid directory, which can be read. 
    */ 
    static public List<File> getFileListing(
    File aStartingDir 
) throws FileNotFoundException { 
    validateDirectory(aStartingDir); 
    List<File> result = getFileListingNoSort(aStartingDir); 
    Collections.sort(result); 
    return result; 
    } 

    // PRIVATE // 
    static private List<File> getFileListingNoSort(
    File aStartingDir 
) throws FileNotFoundException { 
    List<File> result = new ArrayList<File>(); 
    File[] filesAndDirs = aStartingDir.listFiles(); 
    List<File> filesDirs = Arrays.asList(filesAndDirs); 
    for(File file : filesDirs) { 
     result.add(file); //always add, even if directory 
     if (! file.isFile()) { 
     //must be a directory 
     //recursive call! 
     List<File> deeperList = getFileListingNoSort(file); 
     result.addAll(deeperList); 
     } 
    } 
    return result; 
    } 

    /** 
    * Directory is valid if it exists, does not represent a file, and can be read. 
    */ 
    static private void validateDirectory (
    File aDirectory 
) throws FileNotFoundException { 
    if (aDirectory == null) { 
     throw new IllegalArgumentException("Directory should not be null."); 
    } 
    if (!aDirectory.exists()) { 
     throw new FileNotFoundException("Directory does not exist: " + aDirectory); 
    } 
    if (!aDirectory.isDirectory()) { 
     throw new IllegalArgumentException("Is not a directory: " + aDirectory); 
    } 
    if (!aDirectory.canRead()) { 
     throw new IllegalArgumentException("Directory cannot be read: " + aDirectory); 
    } 
    } 
} 
0

請使用下面的一段代碼。

public static void listFiles(final File folder) { 
    for (final File fileEntry : folder.listFiles()) { 
     if (fileEntry.isFile() && fileEntry.getName().endsWith(".txt")) { 
      System.out.println(fileEntry.getName()); 
     } 
    if (fileEntry.isFile() && fileEntry.getName().endsWith(".pdf")) { 
      System.out.println(fileEntry.getName()); 
     } 
    else { 
      listFiles(fileEntry); 
     } 
    } 
} 

public static void main(String startingPath){ 
    File folder = new File(startingPath); 
    listFiles(folder); 
} 
相關問題