下面的代码是为了获取两个文件,找到不重复的值,并将它们输出到另一个文件。
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/