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 ?
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 ?
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.
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);
}
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);
}
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.