gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:16:48 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com