Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java没有';t遍历大目录中的所有文件_Java_Loops_Csv_Directory - Fatal编程技术网

Java没有';t遍历大目录中的所有文件

Java没有';t遍历大目录中的所有文件,java,loops,csv,directory,Java,Loops,Csv,Directory,我第一次使用安然电子邮件数据集进行数据挖掘。 我试图遍历目录中的每个文件,并将每个文件的日期、时间和地址解析为csv文件 问题是java似乎没有遍历所有这些文件,这就是为什么我的csv文件太短了1000行。我怎样才能解决这个问题 我的代码: public class FileReader { public static void main(String[] args) throws FileNotFoundException{ FileReader fileReader =

我第一次使用安然电子邮件数据集进行数据挖掘。 我试图遍历目录中的每个文件,并将每个文件的日期、时间和地址解析为csv文件

问题是java似乎没有遍历所有这些文件,这就是为什么我的csv文件太短了1000行。我怎样才能解决这个问题

我的代码:

public class FileReader {


    public static void main(String[] args) throws FileNotFoundException{
    FileReader fileReader = new FileReader();

    //fileReader.mainFunction("maildir/skilling-j/_sent_mail");
    fileReader.mainFunction("maildir/skilling-j/inbox");
    /*fileReader.mainFunction("maildir/skilling-j/sent");
    fileReader.mainFunction("maildir/lay-k/inbox");
    fileReader.mainFunction("maildir/lay-k/_sent");
    fileReader.mainFunction("maildir/lay-k/sent");*/
    System.out.println("done!");

    }
    public void mainFunction(String fileName) throws FileNotFoundException{
    File maindir = new File(fileName);
    PrintWriter pw = new PrintWriter(new File("Analysis.csv"));
    StringBuilder sb = new StringBuilder();
    StringBuilder sbpre = new StringBuilder();

    Scanner scanner;
    sbpre.append("Date");
    sbpre.append(',');
    sbpre.append("Time");
    sbpre.append(",");
    sbpre.append("From");
    sbpre.append('\n');
    int endcounter = 0;
    pw.write(sbpre.toString());
    File [] files = maindir.listFiles();
        for(int i = 0; i < files.length; i++){
            scanner = new Scanner(files[i]);
            System.out.println(files[i].getPath());
            while (scanner.hasNextLine()) {
                String lineFromFile = scanner.nextLine();
                String month = "Jun";
                String year = "2000";
                String time = "00:00:00";
                if(lineFromFile.contains("Date:") & (lineFromFile.length()== 43 | lineFromFile.length()== 42 )){
                    if(lineFromFile.length()==43){
                        sb.append(lineFromFile.substring(11,13));
                        month = lineFromFile.substring(14, 17); 
                        year = lineFromFile.substring(18,22);
                        time = lineFromFile.substring(23,30);
                    }else{
                        sb.append("0");
                        sb.append(lineFromFile.substring(11,12)); 
                        month = lineFromFile.substring(13, 16);
                        year = lineFromFile.substring(17,21);   
                        time = lineFromFile.substring(22,29);
                                            }                   
                    sb.append(".");

                    switch(month){
                    case "Jan":sb.append("01"); sb.append(".");break;
                    case "Feb":sb.append("02"); sb.append(".");break;
                    case "Mar":sb.append("03"); sb.append(".");break;
                    case "Apr":sb.append("04"); sb.append(".");break;
                    case "May":sb.append("05"); sb.append(".");break;
                    case "Jun":sb.append("06"); sb.append(".");break;
                    case "Jul":sb.append("07"); sb.append(".");break;
                    case "Aug":sb.append("08"); sb.append(".");break;
                    case "Sep":sb.append("09"); sb.append(".");break;
                    case "Oct":sb.append("10"); sb.append(".");break;
                    case "Nov":sb.append("11"); sb.append(".");break;
                    case "Dec":sb.append("12"); sb.append(".");break;
                    }
                    sb.append(year);
                    sb.append(",");
                    sb.append(time);
                    sb.append(",");


            }

                if(lineFromFile.contains("X-From:")) {
                        lineFromFile = lineFromFile.replace(",", " ");
                        sb.append(lineFromFile.substring(8));

                    }

            pw.write(sb.toString());
            sb.setLength(0);
        }
            sb.append('\n');
            endcounter = i;
    }
        pw.close();
        System.out.println(endcounter);
    }
}
实际上应该是2500行左右

另外,如果我知道如何通过目录(例如“maildir/skilling-j”)来迭代一个目录,而不是一个包含文件的目录,那我也会很高兴

我知道代码有点臃肿,但这是一个不称职的编码员(me)的结果。

listFiles()方法返回文件和目录列表。您可以使用方法isFile()、isDirectory()来标识文件的类型。请尝试以下简单代码来验证文件夹中的文件:

    File[] files = maindir.listFiles();
    System.out.println("Files count: " + files.length);
    for (int i = 0; i < files.length; i++) {
        System.out.print(files[i].getAbsolutePath());
        if (files[i].isDirectory()) {
            System.out.println(" dir");
        } else if (files[i].isFile()) {
            System.out.println(" file");
        }
    }
File[]files=maindir.listFiles();
System.out.println(“文件计数:“+Files.length”);
对于(int i=0;i

您可以使用isDirectory()方法仅筛选目录并迭代抛出它们。

我建议将其分解以进行调试。有很多支票在进行中。首先确保您从maindir.listFiles()接收到的文件数量达到预期数量;对于一个尺码,它显示了什么?此外,还有更新/更好的选项用于遍历目录树。
listFiles
不包括子文件夹中的文件。
    File[] files = maindir.listFiles();
    System.out.println("Files count: " + files.length);
    for (int i = 0; i < files.length; i++) {
        System.out.print(files[i].getAbsolutePath());
        if (files[i].isDirectory()) {
            System.out.println(" dir");
        } else if (files[i].isFile()) {
            System.out.println(" file");
        }
    }