2010-10-27 18 views
0

Ceci est encore une autre de mes questions Java.Java écrit à la mauvaise conduite de fichier

S'il vous plaît jeter un oeil à ce code:

 

public static void main(String[] args) { 
    if(args.length != 5) { 
    System.out.println("Error. Wrong number of params!"); 
    System.exit(0); 
    } 
    File file = new File(args[0]); 
    try { 
    BufferedImage image = ImageIO.read(file); 
    FileWriter fstream = new FileWriter("output.txt"); 
     BufferedWriter out = new BufferedWriter(fstream); 
    int avg = 0; 
     int w = image.getWidth(); 
     int h = image.getHeight(); 
     Rectangle r = new Rectangle(); 
     double whiteHelp = Double.parseDouble(args[4]); 
     avg = (int) (avg/1); 
     int startX = Integer.parseInt(args[2]); 
     int startY = Integer.parseInt(args[3]); 
     r.width = r.height = Integer.parseInt(args[1]); 
     for(int i = startY; i <= h - r.height; i += r.height) { 
     for(int j = startX; j <= w - r.width; j += r.width) { 
     r.x = j; 
     r.y = i; 
     avg = getTileColor(r, image, whiteHelp); 
     //System.out.print(avg); 
     out.write(avg); 
     } 
     //System.out.println(); 
     out.write("\n"); 
     } 
     out.close(); 

     image.flush(); 
     System.out.println("Finished parsing the image. Solving..."); 
    } catch (Exception e) { 
    System.out.println("Error."); 
    e.printStackTrace(); 
    } 

} 
 

En sortie.txt j'obtenir que du texte non lisible, comme l'ouverture d'un fichier binaire par exemple.

Y a-t-il un problème majeur lorsque BufferedImage et BufferedWriter sont instanciés simultanément? J'utilise la même procédure pour écrire dans un fichier dans une autre classe, où un fichier est ouvert pour la lecture, et un autre est ouvert pour l'écriture, et tout fonctionne très bien.

p.s. Comment entrer & lt caractère sans casser le code ??? Ai-je besoin de l'entrer comme & lt;

Merci

+1

Pour le code, s'il vous plaît utilisez le bouton "format de code" dans la barre d'outils de formatage (l'icône "0101"). J'ai pris la liberté de le faire pour vous. – sleske

+0

btw. ces appels System.out.print montrent la bonne chose dans la sortie lorsqu'ils ne sont pas commentés. – hummingBird

+0

merci sleske, j'ai peur d'avoir écrasé vos modifications, parce que j'étais de retour en édition. J'utilise habituellement PRE et CODE ensemble. Est-ce une mauvaise chose? – hummingBird

Répondre

4

vous invoquez

out.write(avg) 

pour écrire le int avg à la sortie. Ceci appellera la méthode BufferedWriter.write(int); ceci écrira le caractère avec le code de code Unicode avg. Ce n'est probablement pas ce que vous voulez ;-).

Pour imprimer le nombre avg au format décimal, utilisez

out.write(String.valueOf(avg)) 
+0

Wooohooo !!! C'était le bon appel :) – hummingBird