写入.txt文件时会出现奇怪的“框”符号

时间:2017-03-06 21:38:08

标签: java save fileoutputstream bufferedwriter

我正在尝试将数字值保存到.txt文件,将其转换为int,然后添加此int和另一个在程序中定义的文件。这部分似乎没问题,但是当我尝试将这个新值保存回原始的.txt文件时,会出现一个奇怪的符号。

/*
 * @param args the command line arguments
 */
public class TestForAqTablet1 {

    public static void main(String[] args) {
        int itemval=0;
        String  itemcount= "3";
        try{
            BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\kyleg\\Documents\\AQ App Storage\\stock\\1~ k\\od.txt" ));
            String line;
            System.out.println("reading file");
            while((line = in.readLine()) != null){
                itemval = Integer.parseInt(line);
            }
            in.close();
        }
        catch (IOException ex) {
            Logger.getLogger(TestForAqTablet1.class.getName()).log(Level.SEVERE, null, ex);
        }

        //math
        System.out.println("previous number "+itemval);
        System.out.println("count "+itemcount);
        int total = itemval + Integer.parseInt(itemcount);
        System.out.println("Total: "+total);

        //write
        try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\kyleg\\Documents\\AQ App Storage\\stock\\1~ k\\od.txt"), StandardCharsets.UTF_8))) {
            writer.write(total);
        catch (IOException ex) {
                // handle me
            }
        }
    }
}

它正在读取的.txt文件只包含数字0

我的目标是每次运行程序时按指定的数字(itemcount)增加。

这是我不断得到的错误:

run:
reading file
Exception in thread "main" 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 test.pkgfor.aq.tablet.pkg1.TestForAqTablet1.main(TestForAqTablet1.java:37)
C:\Users\kyleg\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

1 个答案:

答案 0 :(得分:2)

您不是在写文本文件。您正在编写char值的位。来自the documentation of Writer.write(int)

  

写一个字符。要写入的字符包含在给定整数值的16个低位中; 16个高位被忽略。

如果要使用Writer编写文本,则必须将数据转换为字符串:

writer.write(String.valueOf(total));