簡體   English   中英

Java從命令行調用列表文件

[英]Java invoke listing files from 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 [Version 6.1.7601]版權所有(c)2009 Microsoft Corporation。 版權所有。 不是文件名和文件大小;)

通過從Java代碼調用cmd可以獲取那些infomarion(文件大小)嗎?

使用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());

        }
    }
}

在回答你的問題,因為它代表的是你正在尋找在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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM