【问题标题】:Exception in thread "main" java.lang.StackOverflowError while reading all files and nested files from a Directory从目录中读取所有文件和嵌套文件时,线程“main”java.lang.StackOverflowError 中的异常
【发布时间】:2018-12-16 11:34:07
【问题描述】:

使用这个程序,我试图读取给定文件夹位置中的所有文件,如果还有其他目录或子文件夹,那么程序也应该能够读取子文件夹中的文件。

此条件读取所有文件:- 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)       

【问题讨论】:

    标签: java stack-overflow java-io


    【解决方案1】:

    当您调用类FileTester 的构造函数时,会初始化字段ft。由于ftFileTester 类型,初始化所述字段意味着再次调用FileTester 类的构造函数,它初始化ft 字段,该字段调用构造函数,该构造函数初始化ft 字段,该字段调用构造函数...

    简而言之,将FileTester ft = new FileTester(); 从类FileTester 中删除。

    【讨论】:

      【解决方案2】:

      您的代码有 2 个缺陷。

      1. 您正在该对象内创建同一类的对象,当您可以使用该类的方法时,不要在 FileTester 类中使用FileTester ft = new FileTester();, 而是使用fileChecker()
      2. 当你遇到一个目录并调用fileChecker()时,你传递了错误的目录给它,你应该传递String s2 = folderPath+"\\"+listOfFiles[i].getName(); fileChecker(s2);

      【讨论】:

      • 很高兴它有帮助!也请选择接受的答案! :)
      猜你喜欢
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2018-07-04
      • 2021-10-24
      • 2019-01-07
      • 1970-01-01
      • 2013-06-20
      相关资源
      最近更新 更多