Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[Java]如何创建文本文件来存储单个数字并不断更新该数字?_Java_User Interface - Fatal编程技术网

[Java]如何创建文本文件来存储单个数字并不断更新该数字?

[Java]如何创建文本文件来存储单个数字并不断更新该数字?,java,user-interface,Java,User Interface,这是我用来尝试存储一个不断变化的数字的代码,但是我遇到了错误,我在JavaGUI中这样做。我不明白为什么它不起作用。第一次在stackOverFlow上发布 public void addPoints(int points, String fileName) throws IOException { String name = (fileName + ".dat"); File file = new File(name); if (!fil

这是我用来尝试存储一个不断变化的数字的代码,但是我遇到了错误,我在JavaGUI中这样做。我不明白为什么它不起作用。第一次在stackOverFlow上发布

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个可以增加或减少的数字

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


    }
java.lang.NumberFormatException:对于输入字符串:

根据Java文档,我在此引用:

引发NumberFormatException以指示应用程序已尝试将字符串转换为其中一种数字类型,但该字符串没有适当的格式

现在,您的文件创建和读取部分很好,因为您已经在执行空检查,所以不会失败

我认为空字符串来自任何JTextField,所以在将其解析为整数之前,需要检查空字符串或空字符串

您可以使用具有良好实用方法的番石榴库


注意:如果您可以将行号与代码片段一起发布,它可以帮助我们更好地识别问题,然后尝试使用此

您得到的确切错误是什么?我不明白为什么它不起作用。。。发布错误的内容或错误输出将有助于获得正确答案。一目了然:如果文件不存在,则创建它。然后你从中读到一行——一个空行。然后使用Integer.parseInt将空行转换为整数。这注定要失败。因此我建议:如果文件不存在,不要尝试从中读取。不过,我可能遗漏了什么。它不一定会失败,因为他已经进行了空检查,如果文件不存在,他会创建一个文件并进行检查。如果文件不存在,不要尝试从中读取同意,但如果文件不存在,他正在创建它,然后尝试从中读取,但根据OP的逻辑,他将永远无法从该文件中读取,因为新创建的文件在br.readLine方法中始终为null感谢您比我更深入地研究它。不过,我不可能看到自己为了这个简单的目的引入了对第三方库的依赖。我根据您的建议重新编写了代码,它可以工作,谢谢@奥列夫。使用第三方库不是强制性的,我们可以创建自己的方法来执行空值检查,但由于它已经存在,因此给出了一个建议。