java中输出流不关闭为啥不能写入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中输出流不关闭为啥不能写入相关的知识,希望对你有一定的参考价值。

java中输出流不关闭是可以写入的,只不过不关闭的话,使用时间长了,会导致严重的内存泄露,导致程序退出。

 标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。将数据冲外存中读取到内存中的称为输入流,将数据从内存写入外存中的称为输出流。

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
  
public class StandardInputOutput   
    public static void main(String args[])   
        String s;  
        // 创建缓冲区阅读器从键盘逐行读入数据  
        InputStreamReader ir = new InputStreamReader(System.in);  
        BufferedReader in = new BufferedReader(ir);  
        System.out.println("Unix系统: ctrl-d 或 ctrl-c 退出"  
                + "\\nWindows系统: ctrl-z 退出");  
        try   
            // 读一行数据,并标准输出至显示器  
            s = in.readLine();  
            // readLine()方法运行时若发生I/O错误,将抛出IOException异常  
            while (s != null)   
                System.out.println("Read: " + s);  
                s = in.readLine();  
              
            // 关闭缓冲阅读器  
            in.close();  
         catch (IOException e)  // Catch any IO exceptions.  
            e.printStackTrace();  
          
      
参考技术A 不是不关闭就不能写入,而是已经在内存缓冲中写入,但并没有写到文档中,所以你看不到
你可以加入调用 flush()方法 刷新该缓冲,那个关闭输出流 和flush()方法一样,都可以刷新缓冲,但close可以节省内存,如果总是调用流,但不关闭,导致内存大量占用,程序崩溃本回答被提问者采纳
参考技术B 调用flush()清除一下缓存就行了

java中文件打开和关闭的问题

编译完运行程序,文件被打开进行了一些操作后,代码中没有编写关闭文件的语句。那么当程序结束退出后,这个文件是否自动被关闭?还是依然保持着打开状态??

JVM退出时会释放所有文件的句柄,这个文件当然是被自动关闭了;如果你在写入文件后,没有及时调用flush(),写入的内容不会刷入磁盘,就丢失了. 参考技术A 根据我的编程经验,也会遇到文件忘记close的情况,我来说一下我在这种情况下发生了什么问题。我打开一个文件,往里面写东西,如果忘了关闭,在buffer中的内容不会写到文件里面去,也就是有时候明明已经写入内容了,当你打开文件看了下发现会少掉了一部分。而如果在程序推出前close了文件流,则不会发生这种情况。所以文件用完了无论是读写都要养成关闭的好习惯,希望我的回答能够帮到你。 参考技术B 可以通过BufferedReader 流的形式进行文件流的大卡,之后通过readLine方法获取到流的内容,之后通过close方法关闭流(关闭文件流)。
BufferedReader bre = null;
try
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环

System.out.println(str);//原样输出读到的内容

备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
参考技术C 自己搞个测试就行了,有没被释放,删除一下文件,删不了就没被释放嘛

以上是关于java中输出流不关闭为啥不能写入的主要内容,如果未能解决你的问题,请参考以下文章

IBM沃森语音流不输出文本转

java中文件打开和关闭的问题

文件输入/输出流不工作

java 输入输出流 一个类中只能使用一次吗? 流关闭后 就不能再打开吗?

java 输入输出流 一个类中只能使用一次吗? 流关闭后 就不能再打开吗?

Java IO流中先关闭输出流还是先关闭输入流?为什么?