此条件将读取所有文件:-if(listOfFiles[i].isFile())
并且此else if(listOfFiles[i].isDirectory())
条件表明是否存在任何子文件夹。
如果有子文件夹,那么我再次调用相同的方法。即:ft.fileChecker(s2);
但是在此步骤中,它将引发运行时错误。
//Main class
public class FileCounter {
public static void main(String[] args) {
String s = "C:\\Users\\Nitk\\Desktop\\Project";
FileTester ftMain = new FileTester();
ftMain.fileChecker(s);
}}
//----------
import java.io.*;
import java.util.*;
public class FileTester {
FileTester ft = new FileTester();
public void fileChecker(String folderPath) {
File f = new File(folderPath);
File[] listOfFiles = f.listFiles();
List<String> list = new ArrayList<>();
FileLineCounter flc = new FileLineCounter();
int count = 0;
boolean isFound; boolean isFoundTxt;
String s = null;
for(int i =0; i < listOfFiles.length; i++){
if(listOfFiles[i].isFile()){
System.out.println(i +". File:" + listOfFiles[i].getName());
s = listOfFiles[i].getName();
list.add(s);
}else if(listOfFiles[i].isDirectory()) {
System.out.println(i +". Directory: " + listOfFiles[i].getName());
String s2 = folderPath+"\\"+listOfFiles[i];
ft.fileChecker(s2);
}
}
}
}
Output:
--------
Run-time error:
Exception in thread "main" java.lang.StackOverflowError
at FileTester.<init>(FileTester.java:3)
at FileTester.<init>(FileTester.java:4)
...
at FileTester.<init>(FileTester.java:4)
at FileTester.<init>(FileTester.java:4)
C:\Users\Nitish\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
答案 0 :(得分:2)
当您调用类FileTester
的构造函数时,字段ft
被初始化。由于ft
的类型为FileTester
,因此初始化该字段意味着再次调用类FileTester
的构造函数,该构造函数将初始化ft
字段,该字段将调用初始化{{1}的构造函数}字段会调用构造函数...
简而言之,从类ft
中删除了行FileTester ft = new FileTester();
。
答案 1 :(得分:0)
您的代码有2个缺陷。
FileTester ft = new FileTester();
,就可以在该对象中创建同一类的对象,
只需使用fileChecker()
。String s2 = folderPath+"\\"+listOfFiles[i].getName(); fileChecker(s2);