java - 为什么正在读取的文件中的行没有添加到我的 ArrayList 中?

标签 java arraylist

下面的代码是为了获取两个文件,找到不重复的值,并将它们输出到另一个文件。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

//keeps only uniques
//remove all values that are duplicates
public class dupeCleaner {
    public static void main(String[]args){
        String fileA = "Testing1.txt";
        String fileB = "Testing2.txt";
        String[] uniques=clean(fileA,fileB);
        writeFile("file.txt",uniques);
    }
    public static String[] clean(String fileA, String fileB){
        String line;
        ArrayList<String> cleaned = new ArrayList<>();
        String[] list1 = readFile(fileA);
        String[] list2 = readFile(fileB);
        boolean[] firstList = new boolean[list1.length];
        for(int k = 0; k < list1.length;k++){
            firstList[k]=checkDupe(list1[k],list2);
        }
        for(int k = 0; k< list1.length;k++){
            if(firstList[k]){
                cleaned.add(list1[k]);
                System.out.println(list1[k]);
            }
        }
        String[] finalList = new String[cleaned.size()];
        finalList=cleaned.toArray(new String[cleaned.size()]);
        return finalList;
    }
    public static void writeFile(String fileName, String[] list){
        try{
        BufferedWriter bw = new BufferedWriter(new FileWriter(fileName,true));
        for(String k: list){
            bw.write(k+"\r\n");
            bw.close();
        }
        }catch(IOException e){
        }
    }
    public static boolean checkDupe(String var, String[] list){
        for(String k : list){
            if(k.equals(var)){
                System.out.println("true");
                return true;
            }
        }
        System.out.println("false");
        return false;
    }
    public static String[] readFile(String fileName){
        ArrayList<String> vars = new ArrayList<>();
        String line;
        try {
            FileReader fr = new FileReader(fileName);
            BufferedReader br = new BufferedReader(fr);
            line = br.readLine();
            while (line != null) {
                vars.add(line);
                line = br.readLine();
            }
        } catch (IOException e) {

        }
        System.out.println(vars.get(5));
        String[] list = vars.toArray(new String[vars.size()]);
        return list;
    }
}

问题出在静态方法readFile上,我不明白为什么System.out.println(vars.get(5));返回一个 IndexOutOfBoundsException,所有代码对我来说都是有意义的,并且文件肯定正在被读取(例如,第一个文件中有 100 行,如果我只输出 String 行,它将全部打印在控制台中)。

有人能解答我的问题吗?

最佳答案

您需要将 bw.close 语句包含在 for 循环之外。您正在做的是将一行写入文件并关闭 Writer,这将仅将第一个字符串写入文件。

try(BufferedWriter bw = new BufferedWriter(new FileWriter(fileName,true));){

    for(String k: list){
        bw.write(k+"\r\n");      
    }
}catch(IOException e){
    //Handle exception
}

关于java - 为什么正在读取的文件中的行没有添加到我的 ArrayList 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38235507/

相关文章:

java - 如何从 ArrayList 交换两个子列表?

java - 在 ArrayList Java 中查找元素

java - 代理对象中的 ID 不可用

java - ArrayList 可以在多线程环境中用于只读目的吗?

Java:遍历 ArrayList 时出现 NoSuchElementException

java - Alljoyn 上线 linux Ubuntu x86_64

java - Android:如何将 HttpResponse 转换为 List<Object>

java - 我无法导入 org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer

java - 8 件拼图游戏的运行时错误

java - Android:java.lang.RuntimeException:在 android.app.ActivityThread.installProvider