我制作了一个程序,列出了扩展程序选择所需目录中的所有文件名。现在我想,我不知道如何更改它以列出子目录中的所有文件。你有什么想法?这是我的代码。谢谢!
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();
}
}
}
答案 0 :(得分:1)
如果您可以使用Java 7或8,则可以使用FileVisitor,但在Java 7中,这意味着编写多行代码。如果没有,你想保持简单,Apache Commons FileUtils可能是你的朋友。
Collection<File> files = FileUtils.listFiles(path, new String[]{"xlxs"}, true);
答案 1 :(得分:0)
我做了一段时间回来找到目录中的所有* .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;
}
这样做,它会搜索每个文件的匹配项,如果匹配,那么它会将它添加到数组“filesFound”,从那里你可以获得匹配文件的所有路径。但是,对于你,你将取出.xlsx和.xls部分并添加你的分机。
fileSearch(String d, String ext)
然后将if更改为:
if(file.isFile() && file.getName().toLowerCase().endsWith(ext))
我也可以在找到与其旁边的文件大小匹配时输出。文件大小只是一个视觉辅助,不会包含在数组中。