Java从命令行调用列出文件

时间:2014-11-20 08:39:11

标签: java file command-line

我尝试使用java从命令行调用文件列表。它看起来像那样:

try {
p=Runtime.getRuntime().exec("cmd.exe /k dir /b /S /a-d \"C:\\Image");
    } catch (IOException e1) {
        e1.printStackTrace();
    } 
    BufferedReader reader=new BufferedReader(
    new InputStreamReader(p.getInputStream())
    ); 

然后我逐行准备......这是有效的。

但是我想得到文件名和文件大小,所以我尝试这样调用:

try {
p=Runtime.getRuntime().exec("cmd.exe for %F in (\"C:\\Image*\") do @echo %~zF  %F");
    } catch (IOException e1) {
        e1.printStackTrace();
    } 
    BufferedReader reader=new BufferedReader(
    new InputStreamReader(p.getInputStream())
    ); 

这只返回两行: Microsoft Windows [版本6.1.7601] 版权所有(c)2009 Microsoft Corporation。版权所有。 这不是文件名和文件大小;)

是否可以通过从java代码调用cmd来获取这些信息(文件大小)?

2 个答案:

答案 0 :(得分:2)

使用File类获取文件大小和文件名:

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

        }
    }
}

答案 1 :(得分:0)

您的问题的答案就是您正在查看C:\Image*,我认为您打算查看C:\Image\*。尝试将相关位更改为

(\"C:\\Image\\*\")

(您可能需要*.*,具体取决于Windows最近是否赶上了世界其他地方。)

但你根本不应该这样做。正确的方法是:

try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*")) {
    for (Path entry: stream) {
        System.out.println(entry.toString()+" has size "+Files.size(entry)
             +" and date "+Files.getLastModifiedTime(entry).toString());
    }
} catch (DirectoryIteratorException ex) {
    // do some error processing
}

我看不出任何理由认为shell命令会更快。它正在执行相同的磁盘I / O.