在Java中如何为System.in赋值?

时间:2012-10-23 10:40:40

标签: java

  

可能重复:
  Writing data to System.in

我们知道System.in(标准输入)已连接到控制台。因此,每当我们在控制台中写入时,它都将流向此流。但有没有办法将值传递给此标准输入而无需从控制台输入,即像System.in = "ABCD"。我只想模仿价值从控制台传递。

2 个答案:

答案 0 :(得分:13)

是的,有。使用System.setIn(InputStream in)

您也可以提供InputStream的任何子类型,因此,如果您想提供特定值,可以使用StringBufferInputStream,如下所示:

StringBufferInputStream s = new StringBufferInputStream("ABCD");
System.setIn(s);

答案 1 :(得分:0)

我认为不要让你的方法直接访问System.in:

public void process() {

    byte b[] = new byte[4000];
    int bytesRead = System.in.read(b);

    ...

}

您应该将其分解,以便将输入流传递到方法中:

public void run() {

    process(System.in);

}

public void process(InputStream is) {

    byte b[] = new byte[4000];
    int bytesRead = is.read(b);

    ...

}

这为您提供了相同的行为,但是您也可以使用自己设计的输入流调用业务逻辑以进行测试。