Java 如何列出目录及其所有子目录中的所有文件
我制作了一个程序,列出了您选择的扩展名所需目录中的所有文件名。现在我想,我不知道如何改变它列出子目录中的所有文件了。你有什么想法吗?这是我的密码。谢谢Java 如何列出目录及其所有子目录中的所有文件,java,list,directory,Java,List,Directory,我制作了一个程序,列出了您选择的扩展名所需目录中的所有文件名。现在我想,我不知道如何改变它列出子目录中的所有文件了。你有什么想法吗?这是我的密码。谢谢 import java.util.*; import java.io.*; public class Program { public static void main(String str[]){ try{ BufferedReader br = new BufferedReader(new
import java.util.*;
import java.io.*;
public class Program {
public static void main(String str[]){
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("1.Enter directory name:");
String adress = br.readLine();
System.out.println("2.Enter file extension:");
String exten = br.readLine();
File directory = new File(adress);
File[] f = directory.listFiles();
List<String> files = new ArrayList<String>();
List<String> valid = new ArrayList<String>();
List<String> names = new ArrayList<String>();
for(int i=0; i < f.length; i++){
if(f[i].isFile()){
files.add(f[i].getName());
}
}
for(int i=0; i < files.size(); i++){
if (files.get(i).endsWith(exten)){
valid.add(files.get(i));
}
}
for(int i=0; i < valid.size(); i++){
int pos = valid.get(i).lastIndexOf(".");
names.add(valid.get(i).substring(0, pos));
System.out.println(names.get(i));
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
import java.util.*;
导入java.io.*;
公共课程{
公共静态void main(字符串str[]){
试一试{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“1.输入目录名:”);
字符串地址=br.readLine();
System.out.println(“2.Enter文件扩展名:”);
字符串ext=br.readLine();
文件目录=新文件(地址);
File[]f=directory.listFiles();
列表文件=新的ArrayList();
List valid=new ArrayList();
列表名称=新的ArrayList();
对于(int i=0;i
如果可以使用Java 7或8,则可以使用,但在Java 7中,这意味着要编写多行代码。如果不是,你想保持简单,可能是你的朋友
Collection<File> files = FileUtils.listFiles(path, new String[]{"xlxs"}, true);
Collection files=FileUtils.listFiles(路径,新字符串[]{“xlxs”},true);
我做了一段时间后,在一个目录中找到了所有的*.xls或*.xlsx
希望这能帮助你回答你的问题
public static List<String> fileSearch(String d){
List<String> filesFound = new ArrayList<String>();
File dir = new File(d);
try{
for(File file: dir.listFiles()){
if(file.isFile() && (file.getName().toLowerCase().endsWith(".xlsx") || file.getName().toLowerCase().endsWith(".xls"))){
long filesize = file.length();
long fileSize = filesize / 1024;
filesFound.add(d + "\\" + file.getName());
System.out.println("Added: " + d + "\\" + file.getName() + " " + fileSize + " KB" );
}else if(file.isDirectory() && !file.isHidden()){
System.out.println("Found Directory: " + file.getName());
filesFound.addAll(fileSearch(d + "\\" + file.getName()));
}else if(isRoot(file)){
//DO NOTHING
}
}
}catch(NullPointerException ex){
ex.printStackTrace();
}finally{
return filesFound;
}
}
private static boolean isRoot(File file){
File[] roots = File.listRoots();
for (File root : roots) {
if (file.equals(root)) {
return true;
}
}
return false;
}
并将if-then更改为:
if(file.isFile() && file.getName().toLowerCase().endsWith(ext))
此外,当它发现与旁边的文件大小匹配时,我会将其输出。文件大小只是一个直观的辅助工具,不包括在数组中。您使用的是什么版本的Java?在Java 7中,您可以使用FileVisitor,在Java 8中,有一个内置的方法,您可以用两行代码编写所有代码。您需要创建自己的方法,而不仅仅是使用一个主方法来工作。请学习使用增强for循环。您应该正确使用
文件
API,使用文件过滤器
会对您有所帮助。至于你的主要问题,你需要重复。谢谢大家的回复。我最近刚开始学习JAVA,所以我不知道增强循环。将从现在开始使用,谢谢<代码>文件.walk(path.get(“.”).filter((path)->path.toString().endsWith(“.java”).forEach(System.out::println)是的,我同意,这是一个非常好的Java8示例!更新了我的答案。这是非常过时的,不仅仅是有点混乱。看看其他建议的解决方案。可能会很混乱,我一年前就做了,并且做了我想做的和他想做的。。。这是一个小小的调整。它会遍历它找到的每个文件夹和目录中的每个文件。但当时我对文件系统Java 7发布的知识有限2011-07-28
。对不起,但是;这是没有理由的。
if(file.isFile() && file.getName().toLowerCase().endsWith(ext))