Ich habe bereits ein Spiel beendet, an dem ich gearbeitet habe. Wenn der Benutzer jedoch eines seiner vorherigen Spiele speichern und laden möchte, funktioniert es in netbeans, wenn ich/schreibe, aber wenn ich es aus der JAR von Netbeans erzeugt es funktioniert nur, wenn die Anwendung nie schließt, ich meine, es verliert alle Daten, wenn es schließt, und ich vermute, ist, weil es nicht schreiben oder laden die Dateien Ich erhalte diesen Fehler, wenn ich ihn von der Konsole aus starte. Es gibt nur eine einzige ArrayList innerhalb dieser txt-Datei mit allen Benutzerinformationen. Es macht auch dasselbe mit der Records-Datei, dass es nur die Top 10 Spieler des Spiels speichert.Lesen/Schreiben von Dateien aus der JAR-Datei
java.io.FileNotFoundException: saveFiles\Users\Usuarios.txt (The system cannot find the path specified)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at SaveNLoad.SaveUsers.saveUsers(SaveUsers.java:26)
at CrossyMain.MainMenu$ButtonListening.actionPerformed(MainMenu.java:309)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Ist dies, weil ein Pfadproblem? In Netbeans scheint es, dass dieser Pfad der absolute Pfad ist, wenn ich ihn von dort lade, aber ich denke nicht, dass es derselbe ist, wenn er aus der JAR-Datei geladen wird, jeder Rat würde sehr geschätzt werden!
Hier sind die Methoden, die die Datei Schreib-/Leseoperationen für Benutzer
public static void saveUsers (ArrayList<User> usersToSave){
try { //Used to Save Users
File path = new File("saveFiles/Users/Usuarios.txt");
System.out.println(path.getAbsolutePath());
FileOutputStream writeUsers = new FileOutputStream(path);
ObjectOutputStream userStream = new ObjectOutputStream(writeUsers);
userStream.writeObject(usersToSave);
userStream.close();
} catch (IOException ex) {
Logger.getLogger(SaveUsers.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void loadUsers(){
try {
File path = new File("saveFiles/Users/Usuarios.txt");
System.out.println(path.getAbsolutePath());
FileInputStream readUsers = new FileInputStream(path);
ObjectInputStream userStream = new ObjectInputStream(readUsers);
ArrayList<User> loaded = (ArrayList<User>) userStream.readObject();
User.setUsers(loaded);
userStream.close();
} catch (IOException | ClassNotFoundException ex) {
System.out.println("File Not Created");
}
}
Lese-/Schreiboperationen für die Unterlagen einreichen (Anmerkung sort() ist nur eine Funktion, die mit einem Komparator befiehlt die Arraylist) verwalten
private static final String RECORDSFILE = "saveFiles/Records/Records.txt";
public static void loadScoreFile() {
try{
inputStream = new ObjectInputStream(new FileInputStream(RECORDSFILE));
scores = (ArrayList<Score>) inputStream.readObject();
sort();
inputStream.close();
} catch (IOException | ClassNotFoundException e) {
}
}
public void updateScoreFile() {
try {
outputStream = new ObjectOutputStream(new FileOutputStream(RECORDSFILE));
sort();
outputStream.writeObject(scores);
outputStream.close();
} catch (IOException e) {
}
}
Auch hier funktioniert es in netbeans in Ordnung, aber es in der JAR-Datei funktioniert nicht, wenn ihr von mehr Code benötigen, was ich habe bereits gebucht lemme wissen! aber das sind die Funktionen, die die In/Out-Operationen für die 2 Dateien Datensätze und Benutzer behandelt! Jeder Vorschlag würde sehr geschätzt werden!
Ist der Pfad 'saveFiles/Records/Records.txt' ein Unterverzeichnis innerhalb des Verzeichnisses, in dem Sie die JAR-Datei ausführen? – uniknow
Yah! aber es ist jetzt in Ordnung, wie EJP sagte ich arbeitete an dem Dateisystem, ich änderte nur, wo es die Daten wie zum Beispiel der "user.home" Systemordner – NeptaliD