1

I am trying to take a number value saved to a .txt file, convert it to an int, and then add this int and another one that is defined within the program. This section seems to be okay, however when I try to save this new value back to the original .txt file, a weird symbol is appearing.

/*
 * @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
            }
        }
    }
}

The .txt file it's reading from contains only the number 0.

My goal is for this to increase every time the program is run, by the specified number (itemcount).

This is the error I keep getting:

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)
Kevin J. Chase
  • 3,587
  • 4
  • 19
  • 39
Kyle
  • 31
  • 5

1 Answers1

2

You are not writing a text file. You are writing the bits of a char value. From the documentation of Writer.write(int):

Writes a single character. The character to be written is contained in the 16 low-order bits of the given integer value; the 16 high-order bits are ignored.

If you want to write text using a Writer, you must convert your data to a String:

writer.write(String.valueOf(total));
VGR
  • 33,718
  • 4
  • 37
  • 50