以下のコードは、2つのファイルをとり、重複しない値を見つけて別のファイルに出力するように記述されています。問題は静的メソッドreadFileのである読み込み中のファイルの行が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;
}
}
、私は理解していない理由のSystem.out.println(vars.get(5)); IndexOutOfBoundsExceptionを返します。すべてのコードが意味を持ち、ファイルが確実に読み込まれています(たとえば、最初のファイルに100行あり、文字列を出力しただけではすべてがコンソールに出力されます)。
誰でも私の問題を明らかにすることができますか?
、デバッガでコードを強化している:
writeFile()
にループからbw.close()
文を削除しますか? – OldProgrammer私は99.9%のファイルが存在しないこと、 'new FileReader(fileName)'がその結果に対して 'IOException'をスローしたこと、そしてあなたのコードが**その例外をキャッチし**無視する'vars'は空のリストです。 **あなたのコードが正しく動作していない* – Andreas