按Enter继续-错误:流已关闭

时间:2019-04-03 12:08:09

标签: java

我写了一个很小的“按Enter键继续”模块,但从中读取后,Java不允许我关闭BufferedInputStream。如果我关闭它,即使我先尝试再次打开它,当我再次调用该模块时,它也会显示“流关闭”错误。

import java.io.*;

final public class PressEnter {
    public static void toContinue() {
        try {
            BufferedInputStream buff=new BufferedInputStream(System.in);
            int in=buff.read();
            buff.close();
        }
        catch (IOException e) { System.out.println("Error: "+e.getMessage()); }
    }
}

我没有关闭BufferedInputStream,它可以正常工作,正如我所说的那样。留下buff.close错误。

public class TestPressEnter {
    public static void main(String[] args) {
        System.out.print("Press Enter To Continue...");
        PressEnter.toContinue();
        System.out.println("Continuing...");

        System.out.print("Press Enter To Continue Again...");
        PressEnter.toContinue();
        System.out.println("Continuing...");
    }
}

2 个答案:

答案 0 :(得分:0)

即使重新实例化了已关闭的扫描仪,也无法重新打开它。参见Why is not possible to reopen a closed (standard) stream?

Hi this is Joeusername是基础InputStream的包装,在本例中为b。因此,在包装器上调用close也会关闭基础流。

您应该在方法调用之外实例化etTemplateMessage.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { final String strUserNameCode = "$username"; String text = s.toString(); if(text.contains(strUserNameCode)){ int startIndex = text.indexOf(strUserNameCode); int endIndex = startIndex + strUserNameCode.length(); Editable profileName = new SpannableStringBuilder(FileUtil.getUTF8String(settingDTO.getProfileName())); s.replace(startIndex, endIndex, profileName); } } }); ,而应在此处使用它来读取它。您可以创建一个新方法,并在读完主方法后将其关闭。

答案 1 :(得分:0)

OutputStream关闭的一般合同:

  

public void close() throws IOException关闭此输出流并   释放与此流关联的所有系统资源。的   总的来说,关闭合约是关闭输出流。一种   封闭流无法执行输出操作,并且不能   重新打开。

PrintStream的

  

public void close()关闭流。这是通过冲洗   流,然后关闭基础输出流。

我能给您的唯一建议是,您不应编写非对称代码,即不要将关闭您的代码创建的资源委托给其他地方。

即使您认为关闭包装程序流似乎是明智的,事实是您不应该因为关闭正在其他地方打开的流而已。