我尝试使用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来获取这些信息(文件大小)?
答案 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.