【问题标题】:Unable to copy txt file over to arraylist and into file无法将 txt 文件复制到 arraylist 并复制到文件中
【发布时间】:2020-04-01 11:36:03
【问题描述】:

我正在尝试将这个大的 txt 文件添加到数组列表中,然后对数据进行排序。然后将 15000 行放在各种临时文件中。我无法将数据放入每个文件中。这是我的代码:

package bigfilesorter2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class bigfilesorter2 {

    public static final int NUM_LINES = 15000;

    public static void main(String args[]) throws IOException {



        FileReader fileReader = new FileReader("Aesop_Shakespeare_Shelley_Twain.txt");
        BufferedReader br = new BufferedReader(fileReader);

        ArrayList<String> arraylist = readingfile(br);

        //System.out.println(arraylist);
        makingfiles(br, arraylist);

    }

    public static void makingfiles(BufferedReader br, ArrayList<String> arraylist) throws IOException {
        int start = 0;
        int end = 15000;

        for(int i = 0; i < 20; i++) {
            File file = new File("/Users/domlanza/desktop/testing/Filee"+i+".txt");
            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);
            for(;start <= end; start++){
                bw.write(arraylist.get(start));
                bw.newLine();
            }
            bw.flush();
            bw.close();
            fw.close();
            start = end + 1;
            end += 15000;
        }
    }

    public static ArrayList<String> readingfile(BufferedReader br) throws FileNotFoundException, IOException {
        //Read in file

        Scanner s = new Scanner(new File("Aesop_Shakespeare_Shelley_Twain.txt"));
        int count = 0;
        ArrayList<String> arraylist = new ArrayList<String>();

            while (s.hasNext()) {
                count++;
                arraylist.add(s.nextLine());

            }




        //} catch (IOException e) {e.printStackTrace();}
        Collections.sort(arraylist);
        //System.out.println(arraylist);
        return arraylist;
        }
}

任何帮助将不胜感激。逗号只是被排序的文件........

“看起来你的帖子主要是代码”

【问题讨论】:

  • 现在到底是什么问题?
  • @SuperMario48 “我无法将数据放入文件中。”
  • 我的问题是我只想将 0-15000 行的数组列表放在第一个文件中,然后将 15,001-30,000 行放在第二个文件中,等等

标签: java file arraylist


【解决方案1】:

在你的 makefiles 方法中,也许像这样作为一个内部 for 循环。

// outside of the for loops
int start = 0;
int end = 15000;


// inner for loop
for(;start <= end; start++){
    bw.write(arraylist.get(start));
    bw.newline();
}
// end of outer for loop
start = end + 1;
end += 15000;

那么完整的方法:

public static void makingfiles(BufferedReader br, ArrayList<String> arraylist) throws IOException {
    int start = 0;
    int end = 15000;

    for(int i = 0; i < 20; i++) {
        File file = new File("/Users/domlanza/desktop/testing/Filee"+i+".txt");
        FileWriter fw = new FileWriter(file);
        BufferedWriter bw = new BufferedWriter(fw);
        for(;start <= end; start++){
            bw.write(arraylist.get(start));
            bw.newline();
        }
        bw.flush();
        bw.close();
        fw.close()
        start = end + 1;
        end += 15000;
    }
}

应该适用于您在评论中询问的内容,但您仍然需要更改您的读取方法,以便它读取一个数组列表中的所有行

【讨论】:

  • 这是有道理的。索引现在刚刚超出范围
  • 当 end 超过 149034(即文件长度)时,我应该在循环内部中断吗?
【解决方案2】:

您需要创建一个子列表列表,其中每个子列表包含 15000 行。完整代码如下:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;

public class BigFileSorter {

    public static final int NUM_LINES = 15000;
    public static final int NUM_FILES = 20;
    public static void main(String args[]) throws IOException {

        FileReader fileReader = new FileReader("file.txt");
        BufferedReader br = new BufferedReader(fileReader);

        ArrayList<ArrayList<String>> list = readingfile(br);
        makingfiles(br, list);

    }

    public static void makingfiles(BufferedReader br, ArrayList<ArrayList<String>> list) throws IOException {
        if (list != null) {
            for (int i = 0; i < NUM_FILES; i++) {
                File file = new File("Filee" + i + ".txt");
                FileWriter fw = new FileWriter(file);
                ArrayList<String> subList = list.get(i);
                for (String str : subList) {
                    fw.write(str + System.lineSeparator());
                }
                fw.close();
            }
        }
    }

    public static ArrayList<ArrayList<String>> readingfile(BufferedReader br)
            throws FileNotFoundException, IOException {
        ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
        ArrayList<String> subList;
        String line;
        try {
            for (int i = 0; i < NUM_FILES; i++) {
                subList = new ArrayList<String>();
                for (int j = 0; j < NUM_LINES; j++) {
                    line = br.readLine();
                    if (line == null) {
                        break;
                    }
                    subList.add(line);
                }
                Collections.sort(subList);
                list.add(subList);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            br.close();
        }
        return list;
    }
}

如有任何疑问,请随时发表评论。

【讨论】:

  • 我假设它给出了一个空指针,因为在 149034 之后什么都没有
  • 在 java.base/java.util.ComparableTimSort.binarySort(ComparableTimSort.java:262) 的 java.base/java.util.ComparableTimSort.sort 的线程“主”java.lang.NullPointerException 中的异常(ComparableTimSort.java:207) 在 java.base/java.util.Arrays.sort(Arrays.java:1315) 在 java.base/java.util.Arrays.sort(Arrays.java:1509) 在 java.base/ java.util.ArrayList.sort(ArrayList.java:1749) at java.base/java.util.Collections.sort(Collections.java:143) at assignment11yatesbigfilersorter.bigfilesorter.readingfile(bigfilesorter.java:46) at a11yatesbigfilersorter.bigfilesorter .main(bigfilesorter.java:18)
  • 它创建所有文件,只是文件是重复的,文件 0-4 有文本,但 5-19 没有
  • 排序是否需要移动到循环中的其他位置?
  • 它只是给了我三个没有任何内容的小文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多