(已修复)我是 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);
}