私は入出力ファイルを作成しようとしていますので、アプリケーションの開始時にファイルを読み込んで適切な場所に情報を入れてください。アプリでは、私はこのファイルに情報を追加することができます。ファイル内の奇妙なことを読んで印刷するJava
問題は「1」のような本当に奇妙なことを読み書きすることです。これは私の読書機能である:
private Vector<GEPlayer> ReadPlayers() {
Vector<GEPlayer> play_aux = new Vector<>();
String path = System.getProperty("user.dir");
try {
File fread = new File(path + "/bin/Players.txt");
System.out.println(fread.length());
if (fread.length() > 3) {
BufferedReader bread = new BufferedReader(new InputStreamReader(new FileInputStream(fread), "ISO-8859-1"));
String linea;
int i = 0;
while ((linea = bread.readLine()) != null) {
GEPlayer p_aux = new GEPlayer(-1);
if (linea != null) {
switch (i) {
case 0:
currentidplayer = Integer.parseInt(linea);
p_aux.setId_player(currentidplayer);
System.out.println("GEModel -- ReadPlayers -- Readed Player ID: " + currentidplayer);
i++;
break;
case 1:
currentidteam = Integer.parseInt(linea);
p_aux.setId_team(currentidteam);
System.out.println("GEModel -- ReadPlayers -- Readed Player Team ID: " + currentidplayer);
i++;
break;
case 2:
p_aux.setName(linea);
System.out.println("GEModel -- ReadPlayers -- Readed Player Name: " + linea);
i++;
break;
case 3:
p_aux.setSurname(linea);
System.out.println("GEModel -- ReadPlayers -- Readed Player Surname: " + linea);
i++;
break;
case 4:
p_aux.setNacionality(linea);
System.out.println("GEModel -- ReadPlayers -- Readed Player Nacionality: " + linea);
i++;
break;
case 5:
p_aux.setActualTeam(linea);
System.out.println("GEModel -- ReadPlayers -- Readed Player Actual Team: " + linea);
i++;
break;
case 6:
p_aux.setBornDate(linea);
System.out.println("GEModel -- ReadPlayers -- Readed Player Born Date: " + linea);
i++;
break;
case 7:
p_aux.setNumber(Integer.parseInt(linea));
System.out.println("GEModel -- ReadPlayers -- Readed Player Number: " + linea);
play_aux.add(p_aux);
i = 0;
break;
}
}
}
if (i != 0) {
currentidplayer = 0;
play_aux.removeAllElements();
}
}
} catch (FileNotFoundException | UnsupportedEncodingException ex) {
Logger.getLogger(GEModel.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(GEModel.class.getName()).log(Level.SEVERE, null, ex);
}
return play_aux;
}
そして、これは私の書き込み機能である:
private void writePlayer(GEPlayer aux) {
File fw;
BufferedWriter bw = null;
try {
String path = System.getProperty("user.dir");
fw = new File(path + "/bin/Players.txt"); ///< The true will append the new data
FileOutputStream fos = new FileOutputStream(fw);
bw = new BufferedWriter(new OutputStreamWriter(fos));
bw.write(aux.getId_player()); ///< Appends the string to the file
System.out.println("GEModel -- writePlayer -- Printed: " + aux.getId_player());
bw.newLine();
bw.write(aux.getId_team()); ///< Appends the string to the file
System.out.println("GEModel -- writePlayer -- Printed: " + aux.getId_team());
bw.newLine();
bw.write(aux.getName()); ///< Appends the string to the file
System.out.println("GEModel -- writePlayer -- Printed: " + aux.getName());
bw.newLine();
bw.write(aux.getSurname()); ///< Appends the string to the file
System.out.println("GEModel -- writePlayer -- Printed: " + aux.getSurname());
bw.newLine();
bw.write(aux.getNacionality()); ///< Appends the string to the file
System.out.println("GEModel -- writePlayer -- Printed: " + aux.getNacionality());
bw.newLine();
bw.write(aux.getActualTeam()); ///< Appends the string to the file
System.out.println("GEModel -- writePlayer -- Printed: " + aux.getActualTeam());
bw.newLine();
bw.write(aux.getBornDate()); ///< Appends the string to the file
System.out.println("GEModel -- writePlayer -- Printed: " + aux.getBornDate());
bw.newLine();
bw.write(aux.getNumber()); ///< Appends the string to the file
System.out.println("GEModel -- writePlayer -- Printed: " + aux.getNumber());
bw.newLine();
bw.close();
} catch (IOException ex) {
Logger.getLogger(GEModel.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
bw.close();
} catch (IOException ex) {
Logger.getLogger(GEModel.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
私はTXTに情報せずにプログラムを実行すると、私は完全にすべてのものを読むことができる、それが正しい情報を表示しますその情報が正しいことを私に伝えます。
Exception in thread "main" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at GEModel.GEModel.ReadPlayers(GEModel.java:55) ///< This line is this: "currentidplayer = Integer.parseInt(linea);"
at GEModel.GEModel.<init>(GEModel.java:34)
at GEMain.GEMainClass.main(GEMainClass.java:22)
のJava結果:私はアプリを再起動すると、しかし、それは私がこのようなエラーがスロー1
私はこの問題を解決するために何ができますか?
ヒント:原則「抽象の単一層」について読んを。おそらく一般的には「クリーンコード」についてです。あなたの貧弱な方法はあまりにも多くのことをやっています。それはあなたが自分のものを読むのを難しくします。それが他人のためにあるべきであるよりはるかに困難です。 – GhostCat
最初からやり直してください。 1つのアイテムをファイルに書き込んで、そのアイテムを読むことができるかどうかを確認します。あなたが1つの項目を書いたり読んだりするのに成功すると、2つの項目に移動します。すべてのアイテムを書き込んで読み込むまで、この方法を続けます。この方法で、あなたが書いた項目を読むのに問題があるとき、問題はあなたのコードに追加した最新の項目で最もよく起こります。 –
あなたの実装に 'GEPlayer'を追加しました – krzydyn