(修正済み) 私は Java を初めて使用し (おそらくコードの効率の悪さからわかるでしょう)、テキスト ファイルからのデータの読み取りに問題があります。
ファイルを作成し、データをファイルに書き込む方法の例を次に示します。
final String GString = "c:/GradeCalc/java/files";
Path Gpath = Paths.get(GString);
if (Files.notExists( Gpath )){
try {
Files.createDirectories(Gpath);
} catch (IOException e2) {
System.out.println(e2);
}
}
final String Gfile = "Grades.txt";
Path filePath = Paths.get(GString, Gfile);
if (Files.notExists (filePath)) {
try {
Files.createFile (filePath);
} catch (IOException e1) {
System.out.println(e1);
}
}
File gradeFile = filePath.toFile();
try (PrintWriter out = new PrintWriter(
new BufferedWriter(
new FileWriter (gradeFile))))
{
if (BQ1Num != null){
out.print(BQ1Num + "\t" );
}else{
out.print("0.0"+"\t");}
if (BQ2Num != null){
out.print(BQ2Num + "\t" );
}else{
out.print("0.0"+"\t");}
if (BQ3Num != null){
out.print(BQ3Num + "\t" );
}else{
out.print("0.0"+"\t");}
if (BQ4Num != null){
out.println(BQ4Num + "\t" );
}else{
out.println("0.0"+"\t");}
out.close ();
}
catch (IOException a)
{
System.out.println (a);
}
ファイルへのデータの書き込みは完全に機能しているようです。そのデータを読み取って変数に設定しようとすると、問題が発生します。
上記のファイルからデータを読み取り、データを変数に割り当ててから、それらの変数を使用する方法の例を次に示します。
try (BufferedReader in = new BufferedReader(new FileReader(Gfile))){
String line = in.readLine();
while(line != null){
String[] columns = line.split("\t");
BQ1RetrievedNum = columns [0];
BQ2RetrievedNum = columns [1];
BQ3RetrievedNum = columns [2];
BQ4RetrievedNum = columns [3];
line = in.readLine();
}
}
catch(IOException b){
System.out.println(b);
}
if (BQ1RetrievedNum != null ){
BQ1.setText(" Quarter 1 " +BQ1RetrievedNum+ "%");
}
if (BQ2RetrievedNum != null){
BQ2.setText(" Quarter 2 " +BQ2RetrievedNum+ "%");
}
if (BQ3RetrievedNum != null){
BQ3.setText(" Quarter 3 " +BQ1RetrievedNum+ "%");
}
if (BQ4RetrievedNum != null){
BQ4.setText(" Quarter 4 " +BQ1RetrievedNum+ "%");
}
プログラムを実行するたびに、ArrayIndexOutOfBoundsException
. この例外を修正する方法を何時間も探しましたが、成功しませんでした。
Grades.txt の内容は次のようになります。
43.0 0.0 0.0 0.0
これは、編集後の fileReader のコードです。
try (BufferedReader in = new BufferedReader(new FileReader(Gfile))){
String line = in.readLine();
line = in.readLine();
String[]columns = line.split("\t");
for(int i=0;i<4;i++) {
if(i<columns.length) {
switch(i) {
case 1: BQ1RetrievedNum = columns[0];
break;
case 2: BQ2RetrievedNum = columns[1];
break;
case 3: BQ3RetrievedNum = columns[2];
break;
case 4: BQ4RetrievedNum = columns [3];
break;
}
}
}
}
catch(IOException b){
System.out.println(b);
}
私 NullPointerException
はこの行を取得し続けます:
String[]columns = line.split("\t");
これは、修理したリーダーのコードです。
try (BufferedReader reader = Files.newBufferedReader(filePath, ENCODING )){
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
String[]columns = line.split("/");
BQ1RetrievedNum = "";
BQ2RetrievedNum = "";
BQ3RetrievedNum = "";
BQ4RetrievedNum = "";
System.out.println(columns.length);
for(int i=0;i<4;i++) {
if(i<columns.length) {
switch(i) {
case 0: BQ1RetrievedNum = columns[0];
break;
case 1: BQ2RetrievedNum = columns[1];
break;
case 2: BQ3RetrievedNum = columns[2];
break;
case 3: BQ4RetrievedNum = columns[3];
break;
}
}
}
System.out.println("1: "+BQ1RetrievedNum);
System.out.println("2: "+BQ2RetrievedNum);
System.out.println("3: "+BQ3RetrievedNum);
System.out.println("4: "+BQ4RetrievedNum);
}
}
catch(IOException b){
System.out.println(b);
}