流 close()-java 输入流的关闭问题

问题描述

java 输入流的关闭问题

如下代码,运行时报Stream closed错, 把bs.close();注释了正常,每次循环不能初始化流么?

 import java.io.*;
public class Test{
    public static void main(String[] args) {
        try{
            while(true){
                BufferedReader bs = new BufferedReader(new InputStreamReader(System.in));
                System.out.println(bs.readLine());
                bs.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

解决方案

举个例子
BufferedReader Input1 = new BufferedReader(new InputStreamReader(System.in));
BufferedReader Input2 = new BufferedReader(new InputStreamReader(System.in));
这两句话中的Input1和Input2都是由System.in封装而来。这是设计模式中的装饰模式的应用,顾名思义,装饰模式就是对最原始的东西进行装饰,只改变了外表,但实质并没有改变。System.in就是最原始的东西,Input1和Input2只是他被装饰后的外表,所以程序中的Input1和Input2的实质上都是System.in。调用Input1.close(),会自动调用Input1的实质System.in.close(),所以对于Input2来说他的实质System.in已经关闭掉

解决方案二:

Java输入流
java使用两个scanner,关闭输入流
C++中输入流的问题

解决方案三:

必须处理完之后再执行流关闭操作的啊。你的while处理应该是循环读取文件内容才可以,而不是while(true)这个是死循环的啦。
而且流初始化一次就可以了,应该放在while循环外面进行才对,修正代码如下:

    public static void main(String[] args) {
        try{
            BufferedReader bs = new BufferedReader(new InputStreamReader(System.in));
            String value = bs.readLine();
            while(value!=null&&!"".equals(value)){
                System.out.println(value);
                value = bs.readLine();
            }
            bs.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

当用户什么都不输入直接按下Enter键时,while循环结束。

时间: 2024-10-31 21:08:51

流 close()-java 输入流的关闭问题的相关文章

java-socket监听输入流怎么关闭

问题描述 socket监听输入流怎么关闭 用java写的,socket连接后另开一个线程实时监听输入流,但是如果服务器那边发生异常中断了,我这边也利用心跳机制知道有异常,需要断掉socket重新连,但是监听输入流的线程就卡在read的那个方法里了,怎么才能从那个read的阻塞里出来呢? 解决方案 不对啊,我理解的是如果服务器端异常中断了,那么你这边连接也会报连接关闭异常的吧. 解决方案二: 给你粘贴一个服务端和客户端的代码你瞅瞅吧 import java.net.*; import java.i

java 输入输出流 关闭-关于Java输入输出流关闭的问题。。。

问题描述 关于Java输入输出流关闭的问题... 在学java时老师一直强调要用完流要关闭流,但有一个问题我一直没清楚,就是装饰流该怎么个关闭,通常我们是这样关闭的: ... FileWriter fw = new FileWriter(fileName); BufferedWriter bw = new BufferedWriter(fw); ... fw.close(); bw.close(); ... 但我感觉太累赘,既然fw被bw装饰了,bw关闭的同时是否fw也被关闭呢? 或者fw被关闭

Java中窗口关闭事件。

问题描述 Java中窗口关闭事件. 程序代码如下: package com.packageTemp; import java.awt.event.*; import javax.swing.*; import java.awt.*; public class MouseAdapterTest { JFrame f=null; JButton btn=null; public static void main(String[] args) { new MouseAdapterTest(); } /

java ssh项目数据库关闭

问题描述 java ssh项目数据库关闭 项目运行时,一段时间后报这个错误 net.sourceforge.jtds.jdbc.JtdsPreparedStatement.close(JtdsPreparedStatement.java:485) at org.apache.commons.dbcp.DelegatingStatement.close(DelegatingStatement.java:168) at org.apache.commons.dbcp.DelegatingConnec

小白求助,java输入流问题

问题描述 小白求助,java输入流问题 我有好几个方法每个里面都用到了sc.write(s);这个写入的方法,我在主函数里调用这些方法,结果报出: Exception in thread "main" org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : The part /docProps/app.x

Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

声明:该博文以socket中,关闭输出流为例进行说明.   为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言.同样的,din是输入流的代言. 可以造成dout被关闭的操作有: 1.调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入

java 中IO关闭流

问题描述 public class Test_01 {public static void main(String[] args) {FileInputStream fis=null;try { fis=new FileInputStream("D:\workspace\TestIO\src\TestTO_01\TestFile.java"); byte[] buf=new byte[1024]; int c=0; try {while((c=fis.read(buf))>=0)

怎么实现打好了jar包的java程序在关闭后自动重启

问题描述 我写了一个java程序,运行是正常的,在windows命令窗口下面运行也正常,但是这样容易人为意外关闭,由于这个程序要在服务器上整不间断的运行,在网上查了写一bat文件可以实现程序自动重启,请各位大侠们帮忙写一段这样的bat文件要求:服务器启动后自动运行此程序,程序意外关闭了自动重启此程序文件在D:signInGEQD_fat.jar

java输入流停止后如何重置

问题描述 如果我这样写了.Scannerinput=newScanner(System.in);while(input.hasNext()){....}//当我按下ctrl+z结束输入流的时候,做以下操作inttmp=input.nextInt();//这时候会抛出java.util.NoSuchElementException异常.//请问要如何才可以重新启用输入流,让我可以继续进行输入操作.我试过用input.reset();可是没有作用.希望帮帮忙啊. 解决方案 解决方案二:你重新打开背: