2017-03-06 2 views
1

J'essaye de prendre une valeur numérique enregistrée dans un fichier .txt, le convertir en int, puis ajouter ce int et un autre qui est défini dans le programme . Cette section semble être correcte, mais lorsque j'essaie de sauvegarder cette nouvelle valeur dans le fichier original .txt, un symbole étrange apparaît.Bizarre "boîte" symbole apparaît lors de l'écriture dans un fichier .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 
      } 
     } 
    } 
} 

Le fichier .txt il est la lecture de ne contient que le numéro 0.

Mon objectif est d'augmenter chaque fois que le programme est exécuté, par le nombre spécifié (itemcount).

C'est l'erreur que je continue à obtenir:

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) 
+0

si vous remplacez 'writer.write (total),' 'avec writer.write (» 0 ");' êtes-vous encore en train de sauver des caractères étranges – Gab

+0

quand je change le code pour qu'il enregistre "0" – Kyle

+0

Avec les citations ou sans les citations – Gab

Répondre

2

Vous n'êtes pas en train d'écrire un fichier texte. Vous écrivez les bits d'une valeur char. De the documentation of Writer.write(int):

Écrit un seul caractère. Le caractère à écrire est contenu dans les 16 bits de poids faible de la valeur entière donnée; les 16 bits de poids fort sont ignorés.

Si vous voulez écrire du texte en utilisant un écrivain, vous devez convertir vos données en chaîne:

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

Votre code a fonctionné, merci – Kyle