by Anonymous » 21 Aug 2025, 04:12
Ich habe ein Problem, das Textdateien in Java generiert. Ich habe ein einfaches Spiel mit farbigen Bällen gemacht, und wenn zwei gleiche Farbbälle kollidieren, steigt die Punktzahl jedes Mal mit 5 Punkten. Ich versuche, die Punktzahl für das Laden zu speichern, wenn ich ein neues Spiel in einer "points.txt" -Datei starten kann. Java erstellt eine "points.txt" -Datei, aber sie besteht nur aus unlösbaren Symbolen.
Code: Select all
---- DroppingStickyBalls.java ----
int points = 0;
int highScore = 0;
public DroppingStickyBalls(){
.... //other settings
loadScore();
//the score is saved when the window of the game is getting closed
Main.getFrame().addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if(points > highScore) saveScore();
e.getWindow().dispose();
}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
....// other code - in case of collision between same-colored balls ->
points += 5;
g2.dispose();
}
public void saveScore(){
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("points.txt"));
bw.write(String.valueOf(points)); //here it was the problem!
bw.close();
}catch (IOException e){
e.printStackTrace();
}
}
public void loadScore(){
File file = new File("points.txt");
if(file.exists()) {
try {
BufferedReader br = new BufferedReader(new FileReader(String.valueOf(file.toPath())));
System.out.println(br.readLine());
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
---- points.txt ----
//the result both in Notepad and IntelliJ IDEA showed unreadable symbols
< /code>
Ich habe versucht, die Textdatei sowohl in der Intellij -Idee als auch in Notepad zu öffnen, aber das Ergebnis ist derselbe: Der Inhalt ist codiert und unlesbar. Gibt es eine Codierungseinstellung, die ich [url=viewtopic.php?t=12045]ändern[/url] sollte? Wenn der BufferedWriter für eine Nummer in eine lesbare Klartextdatei in Java schreibt, muss [b] seine Write () -Methode einen String -Wert verwenden! Um den Wert in der Textdatei richtig zu lesen, muss er so verwendet werden: < /p>
bw.write(String.valueOf(points));
UPDATE 2: [/b] Nach einem Vorschlag eines anderen Benutzers habe ich einen Hex -Editor verwendet, um den Unterschied zwischen BW.Write (Punkte) und bw.write (String.Valueof (Punkte))
-Coces) zu sehen. In der Textdatei als
ein Byte wie dieses 00110010 , was
50 in decimal ist, übersetzt jedoch in hex als
32 , was
2 in der ASCII -Tabelle ist. Anstatt in dem Dateitext
50 zu lesen, zeigen die Ergebnisse
2 , was völlig falsch ist.
Auch hier kann es Ergebnisse wie in meinem Fall mit durcheinandergebrachten unlesbaren Symbolen erscheinen! 00110000 , die 53 48 in Decimal sind und in hex als
35 30 übersetzt, die in der ASCII -Tabelle
50 sind. Das Ergebnis ist also
vollständig lesbar und genau: 50 Punkte .>
Ich habe ein Problem, das Textdateien in Java generiert. Ich habe ein einfaches Spiel mit farbigen Bällen gemacht, und wenn zwei gleiche Farbbälle kollidieren, steigt die Punktzahl jedes Mal mit 5 Punkten. Ich versuche, die Punktzahl für das Laden zu speichern, wenn ich ein neues Spiel in einer "points.txt" -Datei starten kann. Java erstellt eine "points.txt" -Datei, aber sie besteht nur aus unlösbaren Symbolen.[code]
---- DroppingStickyBalls.java ----
int points = 0;
int highScore = 0;
public DroppingStickyBalls(){
.... //other settings
loadScore();
//the score is saved when the window of the game is getting closed
Main.getFrame().addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if(points > highScore) saveScore();
e.getWindow().dispose();
}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
....// other code - in case of collision between same-colored balls ->
points += 5;
g2.dispose();
}
public void saveScore(){
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("points.txt"));
bw.write(String.valueOf(points)); //here it was the problem!
bw.close();
}catch (IOException e){
e.printStackTrace();
}
}
public void loadScore(){
File file = new File("points.txt");
if(file.exists()) {
try {
BufferedReader br = new BufferedReader(new FileReader(String.valueOf(file.toPath())));
System.out.println(br.readLine());
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
---- points.txt ----
//the result both in Notepad and IntelliJ IDEA showed unreadable symbols
< /code>
Ich habe versucht, die Textdatei sowohl in der Intellij -Idee als auch in Notepad zu öffnen, aber das Ergebnis ist derselbe: Der Inhalt ist codiert und unlesbar. Gibt es eine Codierungseinstellung, die ich [url=viewtopic.php?t=12045]ändern[/url] sollte? Wenn der BufferedWriter für eine Nummer in eine lesbare Klartextdatei in Java schreibt, muss [b] seine Write () -Methode einen String -Wert verwenden! Um den Wert in der Textdatei richtig zu lesen, muss er so verwendet werden: < /p>
bw.write(String.valueOf(points));
[/code]
UPDATE 2: [/b] Nach einem Vorschlag eines anderen Benutzers habe ich einen Hex -Editor verwendet, um den Unterschied zwischen BW.Write (Punkte) und bw.write (String.Valueof (Punkte))
-Coces) zu sehen. In der Textdatei als [b] ein Byte [/b] wie dieses 00110010 , was [b] 50 [/b] in decimal ist, übersetzt jedoch in hex als [b] 32 [/b], was [b] 2 [/b] in der ASCII -Tabelle ist. Anstatt in dem Dateitext [b] 50 [/b] zu lesen, zeigen die Ergebnisse [b] 2 [/b], was völlig falsch ist. [b] Auch hier kann es Ergebnisse wie in meinem Fall mit durcheinandergebrachten unlesbaren Symbolen erscheinen! 00110000 , die 53 48 [/b] in Decimal sind und in hex als [b] 35 30 [/b] übersetzt, die in der ASCII -Tabelle [b] 50 [/b] sind. Das Ergebnis ist also [b] vollständig lesbar und genau: [/b] [b] 50 Punkte [/b].>