23 Sep

Colour console output in Java

Wondering how to colour System.out.println console output in Java? Use standard ANSI escape sequences (just concatenate them with your output, and use ANSI_RESET to go back to default). This works in Linux, MacOS, Windows Powershell and Cygwin on Windows. It DOESN’T work in Windows Command Prompt.

Here are some handy constants:

public static final String ANSI_RESET  = "\u001B[0m";

public static final String ANSI_BLACK  = "\u001B[30m";
public static final String ANSI_RED    = "\u001B[31m";
public static final String ANSI_GREEN  = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE   = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN   = "\u001B[36m";
public static final String ANSI_WHITE  = "\u001B[37m";

public static final String ANSI_BRIGHT_BLACK  = "\u001B[90m";
public static final String ANSI_BRIGHT_RED    = "\u001B[91m";
public static final String ANSI_BRIGHT_GREEN  = "\u001B[92m";
public static final String ANSI_BRIGHT_YELLOW = "\u001B[93m";
public static final String ANSI_BRIGHT_BLUE   = "\u001B[94m";
public static final String ANSI_BRIGHT_PURPLE = "\u001B[95m";
public static final String ANSI_BRIGHT_CYAN   = "\u001B[96m";
public static final String ANSI_BRIGHT_WHITE  = "\u001B[97m";

public static final String[] FOREGROUNDS = {
        ANSI_BLACK, ANSI_RED, ANSI_GREEN, ANSI_YELLOW,
        ANSI_BLUE, ANSI_PURPLE, ANSI_CYAN, ANSI_WHITE,
        ANSI_BRIGHT_BLACK, ANSI_BRIGHT_RED, ANSI_BRIGHT_GREEN, ANSI_BRIGHT_YELLOW,
        ANSI_BRIGHT_BLUE, ANSI_BRIGHT_PURPLE, ANSI_BRIGHT_CYAN, ANSI_BRIGHT_WHITE
};

public static final String ANSI_BG_BLACK  = "\u001B[40m";
public static final String ANSI_BG_RED    = "\u001B[41m";
public static final String ANSI_BG_GREEN  = "\u001B[42m";
public static final String ANSI_BG_YELLOW = "\u001B[43m";
public static final String ANSI_BG_BLUE   = "\u001B[44m";
public static final String ANSI_BG_PURPLE = "\u001B[45m";
public static final String ANSI_BG_CYAN   = "\u001B[46m";
public static final String ANSI_BG_WHITE  = "\u001B[47m";

public static final String ANSI_BRIGHT_BG_BLACK  = "\u001B[100m";
public static final String ANSI_BRIGHT_BG_RED    = "\u001B[101m";
public static final String ANSI_BRIGHT_BG_GREEN  = "\u001B[102m";
public static final String ANSI_BRIGHT_BG_YELLOW = "\u001B[103m";
public static final String ANSI_BRIGHT_BG_BLUE   = "\u001B[104m";
public static final String ANSI_BRIGHT_BG_PURPLE = "\u001B[105m";
public static final String ANSI_BRIGHT_BG_CYAN   = "\u001B[106m";
public static final String ANSI_BRIGHT_BG_WHITE  = "\u001B[107m";

public static final String[] BACKGROUNDS = {
        ANSI_BG_BLACK, ANSI_BG_RED, ANSI_BG_GREEN, ANSI_BG_YELLOW,
        ANSI_BG_BLUE, ANSI_BG_PURPLE, ANSI_BG_CYAN, ANSI_BG_WHITE,
        ANSI_BRIGHT_BG_BLACK, ANSI_BRIGHT_BG_RED, ANSI_BRIGHT_BG_GREEN, ANSI_BRIGHT_BG_YELLOW,
        ANSI_BRIGHT_BG_BLUE, ANSI_BRIGHT_BG_PURPLE, ANSI_BRIGHT_BG_CYAN, ANSI_BRIGHT_BG_WHITE };
17 May

Java: Read contents of resource file to String

If you have a resource text file – even if packaged in a JAR file – you can use the following Java 8(+) code to read the contents into a String. This code will also work in a static method (hence the ClassLoader.getSystemClassLoader()). If you’re in a normal method you can use the current instance’s classloader instead.

String contents = "";
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
InputStream inputStream = classLoader.getResourceAsStream(filename);
if (inputStream != null) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        contents = reader.lines().collect(Collectors.joining(System.lineSeparator()));
}