2016-05-05 15 views
0

私はすでに仕事をしていますが、以前のゲームを保存して読み込もうとすると、ネットビーンで実行している間に保存/書き込みを行うが、netbeansによって生成されたJARからアプリケーションを実行しているときは、アプリケーションが終了しない場合にのみ動作します。つまり、終了時にすべてのデータが失われ、書き込みまたはロードされていないためです。コンソールからファイルを実行すると、このエラーが発生します。そのtxtファイルの中には、すべてのユーザーの情報を持つArrayListが1つだけあります。これはレコードファイルでも同じことをしており、ゲームのトップ10プレーヤーを格納しています。JARファイルからファイルを読み書きする

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) 

これはパスの問題が原因ですか?私はそれがJARファイルからそれを読み込むときに同じではないと思うが、そのアドバイスは非常に感謝されるnetbeansでそれはパスがそこからそれをロードするとき絶対パスであるように思える!ここで

は、ファイル書き込み/を管理する方法であるユーザーレコードの

読み取り/書き込み操作をファイル

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"); 
    } 

    } 
ための読み取り操作((ソートに注意してください)コンパレータとのArrayListを注文するだけの機能です)

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) { 

    } 

}  

ここでも、NetBeansで正常に動作しますが、あなたたちは、私はすでにレムが知って投稿したものとは任意のより多くのコードが必要な場合には、JARファイルに動作していません!しかし、これらは2つのファイルのレコードとユーザーの入出力操作を処理する関数です!どんな提案も高く評価されます!

+0

パス 'saveFiles/Records/Records.txt'は、jarファイルを実行している場所内のサブディレクトリですか? – uniknow

+0

Yah!しかし、EJPのように私はファイルシステム上で作業していると言っていましたが、私は単に "user.home"システムフォルダのようなデータをどこに保存したのかを変更しました – NeptaliD

答えて

1

NetbeansではJARファイルを使用していないため、ファイルシステムを使用しています。

実行中のJARファイル内のファイルに書き込むことはできません。あなたの要件を再確認してください。

+0

.exe拡張子を使用すると動作しますか?私はこれで初めてだから私はちょっと残念ですが、意味が分からないことを言うなら、.exe拡張子を作成するだけで.JARファイルを使ってこれを行うことができると思っています拡張子が.exeの要件 – NeptaliD

+0

.exeがある場合、JARファイルがないため、JARファイルが存在しないため、JARファイルにファイルを書き込むことはできません。あなたはあまり意味がありません。 – EJP

+0

私はちょうどそれに気づいたが、ファイルの場所を変更しただけで、正常に動作しています。しかし、ありがとう!申し訳ありませんが、私は、ファイルを扱うときにJARファイルがどのように動作するかを知りませんでしたが、これは私の最初の小さなプロジェクトです。 – NeptaliD

関連する問題