132 votes

Comment colorer la sortie System.out.println ?

La question est simple :

Comment puis-je colorer la sortie de java ?

Par exemple, en C et dans d'autres langages, je peux utiliser ansi-escape comme suit \033 [0m pour le faire. Mais en java, cela ne fonctionne pas.

public static void main(String[] x) {
    System.out.println("\033[0m BLABLA \033[0m\n");
}

129voto

dylnmc Points 1

La façon la plus simple de le faire est certainement d'utiliser un caractère d'échappement. Sur certaines plates-formes, certaines séquences d'échappement ne fonctionnent pas, et j'ai découvert que l'on peut ne peut pas utiliser simplement une barre oblique inversée comme touche d'échappement (comme String s = "\[36mbla-bla-bla"; . Au lieu de cela, vous devez utiliser le caractère d'échappement (27) pour passer d'un int à un char (i.e. String s = (char)27 + "[36mbla-bla-bla"; . si vous faites maintenant System.out.println(s); vous verrez dans la console le texte cyan. Voir le tableau ci-dessous des valeurs ANSI possibles. Pour utiliser plusieurs valeurs, il suffit de les séparer par un point-virgule.

Tableau ANSI : wikipedia - Codes d'échappement ANSI

Pour une référence rapide :

  • 30 noir
  • 31 rouge
  • 32 vert
  • 33 jaune
  • 34 bleu
  • 35 magenta
  • 36 cyan
  • 37 blanc
  • 40 fond noir
  • 41 fond rouge
  • 42 fond vert
  • 43 fond jaune
  • 44 fond bleu
  • 45 fond magenta
  • 46 fond cyan
  • 47 fond blanc

Donc, System.out.println((char)27 + "[34;43mBlue text with yellow background"); vous donnera un texte bleu avec un fond jaune. ( [1m J'ai remarqué qu'il augmente l'intensité - le rend plus lumineux - mais ne le rend pas plus gras).

Notez également (comme indiqué dans le tableau hypertexte ci-dessus) que de nombreuses séquences de changement d'attribut ne fonctionnent pas, mais que sur la plupart des plates-formes, les attributs de changement de couleur fonctionnent. Je vous recommande d'essayer ces différentes séquences d'échappement sur votre ordinateur mais veuillez noter qu'il ne sera pas possible de le transporter.

32voto

DanP Points 1

Cela a fonctionné pour moi :

System.out.println((char)27 + "[31mThis text would show up red" + (char)27 + "[37m");

Vous avez besoin de la fin "[37m" pour ramener la couleur au blanc (ou à ce que vous utilisiez auparavant). Si vous ne le faites pas, tout ce qui suit peut devenir "rouge".

28voto

Jonas B Points 1697

Non, mais il existe des API de tiers qui peuvent le gérer.

http://www.javaworld.com/javaworld/javaqa/2002-12/02-qa-1220-console.html

Edit : bien sûr, il existe des articles plus récents que celui que j'ai posté, mais l'information est toujours valable.

13voto

Raman Points 51

Oui, c'est possible à 100%.

set classpath= %classpath%;d : \jansi -1.4.jar ;

Essayez le code ci-dessous :

import org.fusesource.jansi.AnsiConsole;
import static org.fusesource.jansi.Ansi.*;
import static org.fusesource.jansi.Ansi.Color.*;

public class Sample

{

  public static void main(String[] args)
  {
    AnsiConsole.systemInstall();

    System.out.println(ansi().fg(RED).a("Hello World").reset());
    System.out.println("My Name is Raman");

    AnsiConsole.systemUninstall();
  }
}

12voto

MrDrews Points 962

Vous pouvez utiliser le JANSI pour rendre les séquences d'échappement ANSI dans Windows.

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