2016-11-10 14 views
-2

これは、常に変更される単一の数値を格納しようと考えたコードですが、エラーが発生しています。これはJava GUIで行います。なぜそれがうまくいかないのか分かりません。初めてここにstackOverFlowを投稿しました。[Java] 1つの番号を保存してその番号を常に更新するために、どのようにテキストファイルを作成しますか?

public void addPoints(int points, String fileName) throws IOException 
    { 
     String name = (fileName + ".dat"); 
     File file = new File(name); 
     if (!file.exists()) 
      { 
       file.createNewFile(); 

      } 
     try (BufferedReader inStream = new BufferedReader(new FileReader(file))) 
     { 
      String inString; 
      int rndInt; 

      while((inString = inStream.readLine()) != null) 
      { 

       rndInt = Integer.parseInt(inString); 
       points += rndInt; 
       clearFile(fileName); 
       FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
      BufferedWriter bw = new BufferedWriter(fw); 
      bw.write(String.valueOf(points)); 
      bw.close(); 

      } 
      inStream.close(); 
     } 


    } 

エラー私はまた

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:569) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at ComputerScienceIAGUI.addPoints(ComputerScienceIAGUI.java:1080) 
    at ComputerScienceIAGUI.jButton12ActionPerformed(ComputerScienceIAGUI.java:856) 
    at ComputerScienceIAGUI.access$1300(ComputerScienceIAGUI.java:25) 
    at ComputerScienceIAGUI$14.actionPerformed(ComputerScienceIAGUI.java:576) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6535) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
    at java.awt.Component.processEvent(Component.java:6300) 
    at java.awt.Container.processEvent(Container.java:2236) 
    at java.awt.Component.dispatchEventImpl(Component.java:4891) 
    at java.awt.Container.dispatchEventImpl(Container.java:2294) 
    at java.awt.Component.dispatchEvent(Component.java:4713) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
    at java.awt.Container.dispatchEventImpl(Container.java:2280) 
    at java.awt.Window.dispatchEventImpl(Window.java:2750) 
    at java.awt.Component.dispatchEvent(Component.java:4713) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
    at java.awt.EventQueue$4.run(EventQueue.java:731) 
    at java.awt.EventQueue$4.run(EventQueue.java:729) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

私は考えることができる唯一の他の理由でのJButton用のコードを取得しています。

private void jButton12ActionPerformed(java.awt.event.ActionEvent evt) {           
     try 
     { 

     addPoints(Integer.parseInt(jTextField15.getText()), "Ruby"); 
     addPoints(Integer.parseInt(jTextField16.getText()), "Amber"); 
     addPoints(Integer.parseInt(jTextField17.getText()), "Pearl"); 
     addPoints(Integer.parseInt(jTextField18.getText()), "Sapphire"); 


     } 
     catch(IOException ioe) 
     {} 
    } 

編集:それは動作します!しかし、コードは、すべての助けを借りても、最も効率的ではないかもしれません。 1つの番号を格納する1つのファイルを作成して増減できるコードを次に示します。

private void jButton12ActionPerformed(java.awt.event.ActionEvent evt) {           
     try 
     { 
     String rP,aP, sP, pP; 
     rP = jTextField15.getText(); 
     aP = jTextField16.getText(); 
     pP = jTextField17.getText(); 
     sP = jTextField18.getText(); 
     addPoints(rP, "Ruby"); 
     addPoints(aP, "Amber"); 
     addPoints(pP, "Pearl"); 
     addPoints(sP, "Sapphire"); 
     infoBox("Points have been saved!", "Message"); 


     } 
     catch(IOException ioe) 
     {} 
    } 

そして、他の部分

public void addPoints(String points, String fileName) throws IOException 
    { 
     String name = (fileName + ".dat"); 
     File file = new File(name); 
     if (!file.exists()) 
      { 
       file.createNewFile(); 
       FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
       BufferedWriter bw = new BufferedWriter(fw); 
       bw.write("0"); 
       bw.close(); 

      } 
     try (BufferedReader inStream = new BufferedReader(new FileReader(file))) 
     { 
      String inString; 
      int rndInt; 

      if((inString = inStream.readLine()) != null) 
      { 

       rndInt = Integer.parseInt(inString); 


       int number = Integer.parseInt(points) + rndInt; 
       clearFile(fileName); 
       FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
      BufferedWriter bw = new BufferedWriter(fw); 
      bw.write(String.valueOf(number)); 
      bw.close(); 
      inStream.close(); 
      } 
      else 
      { 
       FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
       BufferedWriter bw = new BufferedWriter(fw); 
       bw.write("0"); 
       bw.close(); 
      } 
     } 


    } 
+0

正確に取得するエラーは何ですか? – dammina

+0

「なぜ動作しないのかわかりません」...間違ったものを投稿するか、エラー出力が良い答えを得るのに役立ちます。 –

+0

概要:ファイルが存在しない場合は作成します。それから、空の行を読みます。次に、空の行を整数に変換するために 'Integer.parseInt()'を使います。それは失敗につながる。だから私は示唆:ファイルが存在しない場合は、それを読み取ろうとしないでください。私は何かが欠けているかもしれない。 –

答えて

0

java.lang.NumberFormatException:入力文字列の場合: "Javaドキュメントを1として"

と私はそれをここに引用:

NumberFormatExceptionがスローされます。アプリケーションが文字列を数値型のいずれかに変換しようとしたが、文字列に適切な形式がないことを示します。

これで、すでにヌルチェックを行っているので、ファイルの作成と読み取りの部分が正常に機能しているので、そこでは失敗しません。

空の文字列はJTextFieldのいずれかから来ていると思いますので、整数に解析する前にnullまたは空のStringをチェックする必要があります。あなたはそれは私たちがよりよく問題を特定することができスニペットコードと行番号を投稿することができた場合、これを試すまで、:

あなたは素敵なユーティリティメソッドに#Strings.isNullOrEmpty

注意を持っているグアバライブラリを使用することができます

+0

私がしたよりも深く見ていただきありがとうございます。しかし、この単純な目的のために第三者図書館に依存していることを自分自身で紹介する方法はありません。 –

+0

私はあなたの提案でコードを修正し、それは動作します、ありがとう! – NoahMoonWhisper

+0

@ OleV.V。そのサードパーティライブラリを使用することは必須ではありません。私たちは独自のメソッドを作成して(ヌルと空のチェックを行う)ことができますが、すでに存在しているので、提案があります。 –

関連する問題