76 votes

Comment supprimer le contenu imprimé sur la console par System.out.println() ?

Dans une application Java, j'utilise des appels à System.out.println() . Maintenant, je veux trouver un moyen de supprimer ces éléments de manière programmatique.

Je n'ai pas trouvé de solution avec Google, alors y a-t-il des conseils ?

6voto

StriplingWarrior Points 56276

System.out est un PrintStream et en soi, il ne fournit aucun moyen de modifier ce qui est produit. En fonction de ce qui soutient cet objet, vous pouvez ou non être en mesure de le modifier. Par exemple, si vous redirigez System.out vers un fichier journal, vous pourrez peut-être modifier ce fichier après coup. S'il est envoyé directement à la console, le texte disparaîtra une fois qu'il aura atteint le haut du tampon de la console, mais il n'y a aucun moyen d'y remédier par programmation.

Je ne sais pas exactement ce que vous espérez accomplir, mais vous pouvez envisager de créer un proxy PrintStream pour filtrer les messages au fur et à mesure qu'ils sont émis, au lieu d'essayer de les supprimer après coup.

6voto

Jordan King Points 68

Pour effacer l'écran de sortie, vous pouvez simuler une personne réelle en appuyant sur CTRL + L (ce qui efface la sortie). Vous pouvez réaliser cela en utilisant la classe Robot(), voici comment vous pouvez le faire :

try {
        Robot robbie = new Robot();
        robbie.keyPress(17); // Holds CTRL key.
        robbie.keyPress(76); // Holds L key.
        robbie.keyRelease(17); // Releases CTRL key.
        robbie.keyRelease(76); // Releases L key.
    } catch (AWTException ex) {
        Logger.getLogger(LoginPage.class.getName()).log(Level.SEVERE, null, ex);
}

4voto

srkavin Points 857

Juste pour ajouter à l'anwswer de BalusC...

Invoquer System.out.print("\b \b") répété avec un délai donne exactement le même comportement que lorsque nous frappons les espaces arrière dans la console de commande de {Windows 7 / Java 1.6}.

4voto

HesNotTheStig Points 473

J'ai constaté que dans Eclipse Mars, si vous pouvez supposer sans risque que la ligne avec laquelle vous la remplacez sera au moins aussi longue que la ligne que vous effacez, il suffit d'imprimer ' \r (un retour chariot) permettra à votre curseur de revenir au début de la ligne pour écraser les caractères que vous voyez. Je suppose que si la nouvelle ligne est plus courte, vous pouvez simplement compenser la différence avec des espaces.

Cette méthode est très pratique dans Eclipse pour actualiser en direct les pourcentages de progression, comme dans cet extrait de code que j'ai extrait d'un de mes programmes. Il fait partie d'un programme de téléchargement de fichiers multimédia à partir d'un site Web.

    URL url=new URL(link);
    HttpURLConnection connection=(HttpURLConnection)url.openConnection();
    connection.connect();
    if(connection.getResponseCode()!=HttpURLConnection.HTTP_OK)
    {
        throw new RuntimeException("Response "+connection.getResponseCode()+": "+connection.getResponseMessage()+" on url "+link);
    }
    long fileLength=connection.getContentLengthLong();
    File newFile=new File(ROOT_DIR,link.substring(link.lastIndexOf('/')));
    try(InputStream input=connection.getInputStream();
        OutputStream output=new FileOutputStream(newFile);)
    {
        byte[] buffer=new byte[4096];
        int count=input.read(buffer);
        long totalRead=count;
        System.out.println("Writing "+url+" to "+newFile+" ("+fileLength+" bytes)");
        System.out.printf("%.2f%%",((double)totalRead/(double)fileLength)*100.0);
        while(count!=-1)
        {
            output.write(buffer,0,count);
            count=input.read(buffer);
            totalRead+=count;
            System.out.printf("\r%.2f%%",((double)totalRead/(double)fileLength)*100.0);
        }
        System.out.println("\nFinished index "+INDEX);
    }

2voto

Anon Points 21

Les moyens les plus simples de le faire seraient :

System.out.println("\f");

System.out.println("\u000c");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X