Java 如何从文件夹结构中获取文件列表
我正在创建一个编译java文件的程序,目前我让这个程序一次编译一个特定文件夹中的多个文件。但我想让它做的是编译给定文件夹开始的文件夹结构中的所有文件(例如,如果给定以下地址Java 如何从文件夹结构中获取文件列表,java,file,compiler-construction,Java,File,Compiler Construction,我正在创建一个编译java文件的程序,目前我让这个程序一次编译一个特定文件夹中的多个文件。但我想让它做的是编译给定文件夹开始的文件夹结构中的所有文件(例如,如果给定以下地址C:/files\u to\u be\u compiled,您可以搜索此文件夹中的所有文件夹以获得所有.class文件的列表)。我有一个代码,它从一个文件夹中获取所有.class文件,但我需要展开它,从给定文件夹中的所有其余文件夹中获取所有.class文件 String files; File folder
C:/files\u to\u be\u compiled
,您可以搜索此文件夹中的所有文件夹以获得所有.class文件的列表)。我有一个代码,它从一个文件夹中获取所有.class
文件,但我需要展开它,从给定文件夹中的所有其余文件夹中获取所有.class
文件
String files;
File folder = new File("C:/files_to_compile");
File[] listOfFiles = folder.listFiles();
{
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
files = listOfFiles[i].getName();
if (files.endsWith(".class") || files.endsWith(".CLASS")) {
System.out.println(files);
}
}
}
}
字符串文件;
文件夹=新文件(“C:/files_to_compile”);
File[]listOfFiles=folder.listFiles();
{
for(int i=0;i
如何扩展上述代码以从给定文件夹中的所有文件夹中获取所有.class文件?可能对您有用
从链接答案中借用的示例代码:
public void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
System.out.println(fileEntry.getName());
}
}
}
final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);
也许对你有用
从链接答案中借用的示例代码:
public void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
System.out.println(fileEntry.getName());
}
}
}
final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);
也许有点像
void analyze(File folder){
String files;
File[] listOfFiles = folder.listFiles();
{
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
files = listOfFiles[i].getName();
if (files.endsWith(".class") || files.endsWith(".CLASS")) {
System.out.println(files);
}
} else if (listOfFiles[i].isDirectory()){
analyze(listOfFiles[i]);
}
}
}
void start(){
File folder = new File("C:/files_to_compile");
analyze(folder);
}
void分析(文件夹){
字符串文件;
File[]listOfFiles=folder.listFiles();
{
for(int i=0;i
这样,您就可以递归地分析您的结构(深度优先搜索)。可能是这样的
void analyze(File folder){
String files;
File[] listOfFiles = folder.listFiles();
{
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
files = listOfFiles[i].getName();
if (files.endsWith(".class") || files.endsWith(".CLASS")) {
System.out.println(files);
}
} else if (listOfFiles[i].isDirectory()){
analyze(listOfFiles[i]);
}
}
}
void start(){
File folder = new File("C:/files_to_compile");
analyze(folder);
}
void分析(文件夹){
字符串文件;
File[]listOfFiles=folder.listFiles();
{
for(int i=0;i
这样,您就可以递归地分析您的结构(深度优先搜索)。您可以使用Apache Commons遍历目录层次结构并应用过滤器-FileFilterUtils.suffixFileFilter(.class”)
。例如:
public class ClassFileWalker extends DirectoryWalker {
public ClassFileWalker() {
super(FileFilterUtils.directoryFileFilter(),
FileFilterUtils.suffixFileFilter(".class"), -1);
}
protected void handleFile(File file, int depth, Collection results) {
if(file.isFile())
results.add(file);
}
public List<File> getFiles(String location) {
List<File> files = Lists.newArrayList();
try {
walk(new File(location), files);
} catch (IOException e) {
e.printStackTrace();
}
return files;
}
}
公共类ClassFileWalker扩展了DirectoryWalker{
公共类filewalker(){
超级(FileFilterUtils.directoryFileFilter(),
FileFilterUtils.subfixfilefilter(“.class”),-1);
}
受保护的void handleFile(文件、int深度、收集结果){
if(file.isFile())
结果.添加(文件);
}
公共列表getFiles(字符串位置){
List files=Lists.newArrayList();
试一试{
walk(新文件(位置)、文件);
}捕获(IOE异常){
e、 printStackTrace();
}
归还文件;
}
}
然后像这样使用它:
ClassFileWalker walker = new ClassFileWalker();
List<File> files = walker.getFiles("C:/files_to_be_compiled");
ClassFileWalker=newclassfilewalker();
List files=walker.getFiles(“C:/files\u to\u be\u compiled”);
您可以使用从Apache Commons遍历目录层次结构,并应用过滤器-文件过滤器直到.subfixfilefilter(“.class”)
。例如:
public class ClassFileWalker extends DirectoryWalker {
public ClassFileWalker() {
super(FileFilterUtils.directoryFileFilter(),
FileFilterUtils.suffixFileFilter(".class"), -1);
}
protected void handleFile(File file, int depth, Collection results) {
if(file.isFile())
results.add(file);
}
public List<File> getFiles(String location) {
List<File> files = Lists.newArrayList();
try {
walk(new File(location), files);
} catch (IOException e) {
e.printStackTrace();
}
return files;
}
}
公共类ClassFileWalker扩展了DirectoryWalker{
公共类filewalker(){
超级(FileFilterUtils.directoryFileFilter(),
FileFilterUtils.subfixfilefilter(“.class”),-1);
}
受保护的void handleFile(文件、int深度、收集结果){
if(file.isFile())
结果.添加(文件);
}
公共列表getFiles(字符串位置){
List files=Lists.newArrayList();
试一试{
walk(新文件(位置)、文件);
}捕获(IOE异常){
e、 printStackTrace();
}
归还文件;
}
}
然后像这样使用它:
ClassFileWalker walker = new ClassFileWalker();
List<File> files = walker.getFiles("C:/files_to_be_compiled");
ClassFileWalker=newclassfilewalker();
List files=walker.getFiles(“C:/files\u to\u be\u compiled”);
exact duplicate of您应该使用递归遍历当前目录中的所有目录以扫描.class文件。此外,使用.toLowerCase()而不是比较.class和.CLASSexact duplicate of您应该使用递归遍历当前目录中的所有目录以扫描.class文件。另外,使用.toLowerCase()不要比较.class和.class。你应该投票结束这个问题,而不仅仅是剽窃另一个问题的答案。@Alnitak:剽窃包括“偷窃”来自另一个来源的文本,但没有引用来源。根据这个定义,我没有剽窃另一个答案。好吧,也许这有点强烈,但重点仍然是-你确定了一个相同的问题,标准程序是投票结束。@Alnitak:埃利奥特说的是真的,它也回答了我的问题,所以应该是正确的事实上不应该加价down@newSpringer我没有记下来。我也没有投赞成票,不过——IMHO获得选票需要努力。你应该投票来结束这个问题,而不仅仅是剽窃另一个问题的答案。@Alnitak:剽窃包括从另一个来源“窃取”文本而不引用该来源。根据这个定义