(已修復)我是Java的新手(您可能會通過代碼的低效性得出結論),並且在從文本中讀取數據時遇到問題文件。使用一行和多個變量讀取txt文件時遇到問題
以下是我如何創建文件並將數據寫入文件的示例。
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);
}
是什麼'ArrayIndexOutOfBoundsException'意味着什麼?什麼'String []列= line.split(「\ t」);'做? –
從錯誤中顯而易見,列數組沒有您期望的元素。你可以嘗試使用Arrays.toString(列)打印列數組; –