Java-扫描文件夹并按文件类型返回文件大小
假设我要扫描一个包含4-.xlsx文件、8-.docx文件、10-.pdf文件和4.pptx文件的文件夹。我希望我的输出不仅包括文件的分解,还包括所有文件大小的总和 示例输出Java-扫描文件夹并按文件类型返回文件大小,java,file,recursion,Java,File,Recursion,假设我要扫描一个包含4-.xlsx文件、8-.docx文件、10-.pdf文件和4.pptx文件的文件夹。我希望我的输出不仅包括文件的分解,还包括所有文件大小的总和 示例输出 文件类型|#文件数|文件大小总和(MB) .xlsx|4|32 .docx|8|85 我还发现了一些基于扩展名查找和返回文件的其他代码,因此我想知道是否有一些java代码可以查找文件大小?如果我不清楚,我道歉 提前谢谢 只需查看文件对象的“长度” import java.io.File; File file = new
文件类型|#文件数|文件大小总和(MB)
.xlsx|4|32
.docx|8|85
我还发现了一些基于扩展名查找和返回文件的其他代码,因此我想知道是否有一些java代码可以查找文件大小?如果我不清楚,我道歉
提前谢谢 只需查看文件对象的“长度”
import java.io.File;
File file = new File(<filepath>);
int sizeInBytes = file.length();
导入java.io.File;
File File=新文件();
int sizeInBytes=file.length();
如果您已经有一个计算特定类型文件的工作解决方案,那么您应该能够相当容易地集成大小总和。这里有一个方法,您可以在目录上递归(或不递归)使用
private static HashMap<String, Long> sizesForDirectory(String directory, boolean recurseInSubDirectories) {
File folder = new File(directory);
File[] listOfFiles = folder.listFiles();
HashMap<String, Long> sizesByExtension = new HashMap<String, Long>();
if (listOfFiles != null) {
for (File file : listOfFiles) {
if (!file.isDirectory()) {
String extension = file.getName().replaceAll(".*\\.", "");
if (sizesByExtension.containsKey(extension)) {
Long size = sizesByExtension.get(extension) + Long.valueOf(file.length());
sizesByExtension.put(extension, size);
} else {
sizesByExtension.put(extension, file.length());
}
} else if (recurseInSubDirectories) {
HashMap<String, Long> sizesForSubdirectory = sizesForDirectory(file.getAbsolutePath(), recurseInSubDirectories);
for (String ext : sizesForSubdirectory.keySet()) {
if (sizesByExtension.containsKey(ext)) {
sizesByExtension.put(ext, sizesByExtension.get(ext) + sizesForSubdirectory.get(ext));
} else {
sizesByExtension.put(ext, sizesForSubdirectory.get(ext));
}
}
}
}
}
return sizesByExtension;
}
public static void main(String[] args) {
HashMap<String, Long> sizesByExtension = sizesForDirectory("your/path", true);
for (String ext : sizesByExtension.keySet()) {
System.out.println(ext + " : " + sizesByExtension.get(ext));
}
}
private static HashMap sizesForDirectory(字符串目录、布尔递归insubdirectories){
文件夹=新文件(目录);
File[]listOfFiles=folder.listFiles();
HashMap sizesByExtension=新HashMap();
if(listOfFiles!=null){
对于(文件:listOfFiles){
如果(!file.isDirectory()){
字符串扩展名=file.getName().replaceAll(“.\\。”,”);
if(sizesByExtension.containsKey(扩展)){
Long size=sizesByExtension.get(扩展名)+Long.valueOf(file.length());
sizesByExtension.put(扩展名,大小);
}否则{
sizesByExtension.put(扩展名,file.length());
}
}else if(递归insubdirectories){
HashMap sizesForSubdirectory=sizesForDirectory(file.getAbsolutePath(),RecurseInsubDirectory);
for(字符串ext:sizesForSubdirectory.keySet()){
if(sizesByExtension.containsKey(ext)){
sizesByExtension.put(ext,sizesByExtension.get(ext)+sizesForSubdirectory.get(ext));
}否则{
sizesByExtension.put(ext,sizesForSubdirectory.get(ext));
}
}
}
}
}
按扩展返回大小;
}
公共静态void main(字符串[]args){
HashMap sizesByExtension=sizesForDirectory(“您的/path”,true);
for(字符串ext:sizesByExtension.keySet()){
System.out.println(ext+“:“+sizesByExtension.get(ext));
}
}
您搜索过一点吗?这里有一个例子:我很抱歉没有花时间深入搜索stackoverflow。我很欣赏这个方向。谢谢。这已经很接近了!——这似乎只遍历一个文件夹--我希望它遍历文件夹的整个目录,并返回每种文件类型的大小..我编辑了我的答案,添加了一个递归遍历目录的方法,而不是只列出目录。