2016-05-05 6 views
0

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!

+0

Ist der Pfad 'saveFiles/Records/Records.txt' ein Unterverzeichnis innerhalb des Verzeichnisses, in dem Sie die JAR-Datei ausführen? – uniknow

+0

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

Antwort

1

Es funktioniert in Netbeans, weil es nicht die JAR-Datei verwendet, es verwendet das Dateisystem.

Sie können nicht in Dateien innerhalb einer laufenden JAR-Datei schreiben. Überdenken Sie Ihre Anforderung.

+0

Würde es funktionieren, wenn ich .exe Erweiterung gehe? Ich bin neu in diesem Bereich, so dass ich nur entschuldige, wenn ich etwas sage, das keinen Sinn ergibt, ich muss nur die EXE-Erweiterung erstellen, so dachte ich, dass Sie das über die .JAR-Datei machen Anforderung mit einer Erweiterung .exe? – NeptaliD

+0

Wenn Sie eine EXE-Datei haben, haben Sie keine JAR-Datei, daher können Sie immer noch keine Dateien in eine JAR-Datei schreiben, da keine JAR-Datei vorhanden ist. Du machst nicht viel Sinn. – EJP

+0

Haha yeah Ich habe das gerade gemerkt, aber ich habe nur die Speicherorte der Datei geändert und es funktioniert normal! trotzdem danke! Entschuldigung für die Dinge, die ich gesagt habe, wusste ich nicht, wie die JAR-Dateien im Umgang mit Dateien funktioniert, und das ist mein erstes kleines Projekt mit solchen Anforderungen. – NeptaliD

Verwandte Themen