[英]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.