Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problèmes avec FileWriter

    16 juin 2017 à 10:59:26

    Bonjour,

    J'ai écrit un début de classe en Java qui permet de créer des SVG. Cependant, bien que header() soit appelé et que le fichier soit créé, il reste vide...pouvez vous me dire ce qui ne va pas ?

    classe Svg

    package fr.marteloi.svg;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    
    /*
     * Classe permettant d'écrire un SVG a partir
     * de fonctions géométriques.
     */
    public class Svg {
    	/* Le chemin (directory+filename) du fichier */
    	protected String path;		
    	
    	/* Les dimensions de l'image */
    	protected int width, height;
    	
    	/* Le flux dans lequel on écrit */
    	protected File stream;
    	
    	/* Le flux de sortie */
    	protected FileWriter wStream;
    
    	/* Contructeur principal 
    	 * attention: path peut n'être qu'un nom
    	 * de fichier*/
    	public Svg(String path, int width, int height){
    		stream = new File(path);
    		
    		try{
    			this.wStream = new FileWriter(stream);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    		this.path = stream.getAbsolutePath();
    		this.width = width;
    		this.height = height;
    		
    		header();
    	}
    	
    	/* Destructeur */
    	protected void finalize(){
    		footer();
    		try{
    			wStream.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public void header(){		
    		String head = "<svg width = " + width + " height = " + height + ">";
    		
    		try{
    			wStream.write(head);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	private void footer(){
    		try{
    			wStream.write("</svg>");
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    }


    classe Main

    package fr.marteloi.svg;
    
    public class Main {
      public static void main(String[] args) {		
        Svg mySvg = new Svg("test2.svg", 100, 100);
        
      }
    }


    Merci de votre aide =)

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 juin 2017 à 17:31:18

      Salut,

      Tu ne gères pas la fermeture du flux, que ce soit en cas de réussite ou erreur. De plus, il y a des chances que toutes les modifications que tu fais sont faites dans le buffer et non écrites (pas de flush).

      Je te recommande plutôt de supprimer ta variable File (qui ne sert ici à rien), et d'utiliser des try with resources plutôt que stocker un stream ouvert tout au long de ton programme. Le stream doit être ouvert en début de besoin et fermé en fin de besoin.

      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2017 à 22:45:10

        D'accord, il faut que je me documente sur le sujet ^^

        Mais ce n'est pas lié au fait qu'il n'y ai rien d'écrit dans le fichier si ?

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          17 juin 2017 à 11:29:59

          Si le buffer d'écriture n'est pas flush, rien n'est validé, donc rien n'est appliqué.

          Donc, si.

          • Partager sur Facebook
          • Partager sur Twitter

          Problèmes avec FileWriter

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown