Java 的平台独立 /dev/null 输出接收器

问题描述 投票:0回答:5

除了匿名类 (

new OutputStream() { ... }
) 之外,任何人都可以提出一个道德上相当于
new FileOutputStream("/dev/null")
且也适用于 Windows 的类吗?

如果有人想知道“这是做什么的?”

我有一个程序可以对文件进行一致性分析。它有一个“详细”选项。当详细选项打开时,我想看到大量输出。该程序并不着急,它是一个工具,因此我不想编写所有这些额外的

if
语句来测试我是否想要输出,而是只想在不需要时将其写入位桶。

java stream
5个回答
20
投票

您可以使用 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
    }
}

4
投票

NUL
适用于 Windows NT,但不适用于 *NIX。

output = new FileOutputStream("NUL");

更好地使用 Commons IO

NullOutputStream,而不是独立于平台。


4
投票

从 JDK 11 开始,您可以在

OutputStream
-
nullOutputStream
上使用新的静态方法。

var out = OutputStream.nullOutputStream();

0
投票

只要您不关心轻微的性能差异(并且您不觉得可能会耗尽空间),您就可以使用“/dev/null”。在 Windows 上,它将在您当前的驱动器上创建一个真实的文件(例如,c:\dev 呃)。


0
投票
  /**
   * 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);
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.