关闭扫描仪而不关闭System.in

我试图将我的应用程序中较大且经常使用的部分重构为单独的方法,以使其易于维护。

其中一些方法要求用户输入并进行输入验证,因此我使用了Scanner和System.in,但是当我关闭Scanner时,我也关闭了System.in。

所以我的问题是,我只能通过用CloseShieldInputStream屏蔽System.in来防止System.in关闭,还是应该开始将Scanner传递给方法?

回答:

您可以通过实现自定义装饰器来忽略close。

public class UnClosableDecorator extends InputStream {

private final InputStream inputStream;

public UnClosableDecorator(InputStream inputStream) {

this.inputStream = inputStream;

}

@Override

public int read() throws IOException {

return inputStream.read();

}

@Override

public int read(byte[] b) throws IOException {

return inputStream.read(b);

}

@Override

public int read(byte[] b, int off, int len) throws IOException {

return inputStream.read(b, off, len);

}

@Override

public long skip(long n) throws IOException {

return inputStream.skip(n);

}

@Override

public int available() throws IOException {

return inputStream.available();

}

@Override

public synchronized void mark(int readlimit) {

inputStream.mark(readlimit);

}

@Override

public synchronized void reset() throws IOException {

inputStream.reset();

}

@Override

public boolean markSupported() {

return inputStream.markSupported();

}

@Override

public void close() throws IOException {

//do nothing

}

}

并在主要使用

public static void main(String[] args) throws Exception {

System.setIn(new UnClosableDecorator(System.in));

}

以上是 关闭扫描仪而不关闭System.in 的全部内容, 来源链接: utcz.com/qa/403886.html

回到顶部