Независимый от платформы /dev/null выходной приемник для Java

Кроме анонимного класса (new OutputStream() { ... }), может кто-нибудь предложить моральный эквивалент new FileOutputStream("/dev/null") что также работает на Windows?

В случае, если кто-то задается вопросом "для чего это нужно?"

У меня есть программа, которая выполняет анализ согласованности файла. У него есть "подробный" вариант. Когда включена опция verbose, я хочу увидеть много выходных данных. Программа не спешит, это инструмент, поэтому вместо написания всех этих дополнительных if операторы для проверки, если я хочу вывод, я просто хочу записать его в битовую корзину, когда не требуется.

4 ответа

Решение

Вы можете использовать NullOutputStream из общего доступа apache https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/output/NullOutputStream.html

Или просто реализовать свой собственный

package mypackage;

import java.io.OutputStream;
import java.io.IOException;

public class NullOutputStream extends OutputStream {
    public void write(int i) throws IOException {
        //do nothing
    }
}

Начиная с JDK 11, вы можете использовать новый статический метод для OutputStream - nullOutputStream.

      var out = OutputStream.nullOutputStream();

NUL работает для Windows NT, но это не работает в *NIX.

output = new FileOutputStream("NUL");

Лучше использовать NullOutputStream из общего фонда IO вместо того, чтобы быть независимым от платформы.

Пока вас не волнует небольшая разница в производительности (и вы не чувствуете, что вам может не хватить места), вы можете просто использовать "/dev/null". В Windows он создаст настоящий файл на любом вашем текущем диске (например, c:\dev\null).

Другие вопросы по тегам