スキャナーを使用してファイルを読み取ることができます。戻り型が void の場合、データを読み取ってコンソールに出力できますが、その直後に ArrayOutOfBoundsException がスローされます。理想的には、文字列配列として返したいのですが、ArrayOutOfBoundsException しか得られません。どちらの場合も、cancers[j] = input.nextLine() の行で例外がスローされます。配列のサイズが正しいことを確認しました。そのサイズをハードコーディングしないと、コンパイラは同じ行で NullPointerException をスローします (配列のサイズが宣言されていないため、これは理にかなっています)。
追加の操作を行う必要があるため、文字列配列を返すメソッドが必要です。
public String[] readCancer() {
cancers = new String[21];
int j = 0;
try {
input = new Scanner(myData);
String result;
while(input.hasNext()) {
++j;
cancers[j] = input.nextLine();
//System.out.println(cancers[j]);
}
} catch (FileNotFoundException fnfx) {
JOptionPane.showMessageDialog(null, "Txt file could not be found");
}
return cancers;
}
少し異なる方法でメソッドを書き直そうとしましたが、同じエラーが発生します。今回は output[i] = result; です。
public String[] readCancers() {
FileInputStream fis;
DataInputStream dis;
BufferedReader br;
InputStreamReader isr;
String result;
String[] output = new String[21];
int i = 0;
try {
fis = new FileInputStream(myData);
dis = new DataInputStream(fis);
isr = new InputStreamReader(dis);
br = new BufferedReader(isr);
while((result = br.readLine()) != null) {
++i;
output[i] = result;
}
} catch (FileNotFoundException fnfx) {
fnfx.printStackTrace();
} catch (IOException iox) {
iox.printStackTrace();
}
return output;
}