除了匿名类 (
new OutputStream() { ... }
) 之外,任何人都可以提出一个道德上相当于 new FileOutputStream("/dev/null")
且也适用于 Windows 的类吗?
如果有人想知道“这是做什么的?”
我有一个程序可以对文件进行一致性分析。它有一个“详细”选项。当详细选项打开时,我想看到大量输出。该程序并不着急,它是一个工具,因此我不想编写所有这些额外的
if
语句来测试我是否想要输出,而是只想在不需要时将其写入位桶。
您可以使用 apache commons 中的 NullOutputStream 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
}
}
NUL
适用于 Windows NT,但不适用于 *NIX。
output = new FileOutputStream("NUL");
更好地使用 Commons IO
的
NullOutputStream
,而不是独立于平台。
从 JDK 11 开始,您可以在
OutputStream
- nullOutputStream
上使用新的静态方法。
var out = OutputStream.nullOutputStream();
只要您不关心轻微的性能差异(并且您不觉得可能会耗尽空间),您就可以使用“/dev/null”。在 Windows 上,它将在您当前的驱动器上创建一个真实的文件(例如,c:\dev 呃)。
/**
* Implements a "/dev/null" to consume strings without the hassle of checking the exception or closing the stream.
*
* @param str The string to discard
*/
public static void discard(String str) {
try {
OutputStream.nullOutputStream().write(str.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
throw new RuntimeException(e);
}
}