用Layman的术语解释Java中的close()方法

use*_*510 5 java io methods

我经历了一个java教程,允许我创建一个文本文件并在其中写下"20 Bruce Wayne".在主类中调用的最后一个方法名为closeFile(),它在创建后"关闭"文本文件.

如果我没有真正打开它,为什么文件需要"关闭"?通过"打开",我的意思是记事本编辑器(不是我正在使用的IDE)弹出"20 Bruce Wayne"字样.请以外行的方式回答我的问题.

Main.java:

class apple {
    public static void main(String[] args)
    {
        createfile g = new createfile();
        g.openFile();
        g.addRecords();
        g.closeFile();
    }
}
Run Code Online (Sandbox Code Playgroud)

createfile.java

public class createfile {
    private Formatter x;

    public void openFile(){
        try{
            x = new Formatter("supermanvsbatman.txt");
        }
        catch(Exception e){
            System.out.println("you have an error");
        }
    }
    public void addRecords(){
        x.format("%s%s%s","20 ", "Bruce ", "Wayne ");
    }
    public void closeFile(){
        x.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

Sol*_*ist 9

当文件被"打开"时,操作系统会将文件标记为已锁定,通常在使用时不会被其他进程删除.x.close()撤消锁定,允许操作系统和其他进程按照文件的意愿执行操作.

  • 如果我不使用.close(),还有什么可能出错? (3认同)
  • @ user701510:根据您在后台以及操作系统中使用的存储,可能会出现许多问题,例如,从不关闭文件可能会导致操作系统中达到最大打开文件句柄数.如果关闭文件,某些存储系统可能只将文件刷新到磁盘... (2认同)

Alb*_*ano 5

除了售罄活动家的答案,当您使用文件等i/o操作时,您正在使用流向文件添加文本,或从文件中提取文本.当您退出程序时,必须使用方法close()关闭此流,因为您可能会丢失数据.这就像保存操作,如果您不保存文件(关闭流),您将丢失对文件所做的更改.

看这个例子,这个.

  • 冲洗流是什么意思? (2认同)
  • Flush()是一种允许您卸载流的方法.出于效率原因,您将刷新流,因为,例如,如果您在文件中写入一行,此行被缓冲,放在缓冲区上,并刷新流,此行立即写入文件,缓冲区为您正在使用将被清理,准备接收其他数据.通常,当您调用close()时,您都调用flush()来清理缓冲区,写入数据和关闭流.有关这些方法的详细信息,请参阅此处:http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html (2认同)