A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package Io.lianxi;
import java.io.*;
public class Writer {
/**
  * @param args
  */
public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
FileWriter fw=new FileWriter("D:\\javawork\\作业\\Demo1.txt");
//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件,而且该文件会被
//创建到指定目录下,如果目录下已有同名文件将被覆盖!(创建文件)
  fw.write("abcdefghijkopstt");//调用write方法,将字符串写入流中
  //fw.flush(); //刷新后流可以继续使用!
  fw.close();//刷新后会将流关闭!
}
}
写入流时,把close()方法注释掉后,也不影响结果,我又试了下,flush()去掉也不影响结果!




package Io.lianxi;
import java.io.*;
public class Reader {
/**
  * @param args
  */
public static void main(String[] args) throws IOException{
  // TODO Auto-generated method stub
  FileReader fr=new FileReader("D:\\javawork\\作业\\Demo2.txt");
  /*创建一个文件读取流对象,和指定名称的文件相关联
  要保证文件存在,如果不存在会发声异常FileNoFoundException;*/
  
  int ch=0;
  while ((ch=fr.read())!=-1) {//调用read()方法,一交一个读,会自动向下读,直到=-1的时候是结尾了
   System.out.println((char)ch);//强制转换成char类型
  }
  fr.close();//关闭流
}
}

这里面读入流的时候,注释掉close()也不影响结果



总结:这是不是意思是close()关流这个方法,要不要都无所谓了....求解释?

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

6 个回复

倒序浏览
不是的,close方法要不要对程序结果没有影响,但是它可以帮助减少对内存的使用。如果没有close当java启动了垃圾回收器时,因为流还没关闭,系统默认为是运行状态不会对其进行垃圾回收,这样容易转内存,所以一般为了减小内存都会使用close关流。
回复 使用道具 举报
import java.io.*;
public class Reader {
/**
  * @param args
  */
public static void main(String[] args) throws IOException{
  // TODO Auto-generated method stub
  FileReader fr=new FileReader("D:\\javawork\\作业\\Demo2.txt");
  /*创建一个文件读取流对象,和指定名称的文件相关联
  要保证文件存在,如果不存在会发声异常FileNoFoundException;*/
  
  int ch=0;
  while ((ch=fr.read())!=-1) {//调用read()方法,一交一个读,会自动向下读,直到=-1的时候是结尾了
   System.out.println((char)ch);//强制转换成char类型
  }
  fr.close();//关闭流
}
}
/**
* 关闭该流并释放与之关联的所有资源。
* 在关闭该流后,再调用 read()、ready()、mark()、reset()
* 或 skip() 将抛出 IOException。
* close()主要是释放资源的占用
* flush()是将流刷到目的地,系统调用close()之前都会调用一次flush(); 故flush()也可不使用;

* */
回复 使用道具 举报
在写入时也就是fw.write("abcdefghijkopstt");必须要有流的关闭,或刷新;因为没有这些操作就不会从内存中写入硬盘;
你的意思是去掉任意一个都可以是吗?
不是的;close方法必须不能去,因为他是一个对象;如果你不去关他,就不会变成垃圾;那么当你重复执行代码就会产生更多空间占用;
会对你的程序有很大影响;
而第二个写的时候,同理,他是在内存中了,所以System.out.println((char)ch);与close()没有什么联系;但是如果不管流,会占内存。同上。
回复 使用道具 举报
李文富 发表于 2012-6-6 20:24
import java.io.*;
public class Reader {
/**

释放资源空间... flush()将流刷新到目的地,我没有写,也没有运行失败?
回复 使用道具 举报
public static void main(String[] args) throws IOException {
          // TODO Auto-generated method stub
        FileWriter fw=new FileWriter("D:\\javawork\\作业\\Demo1.txt");
        //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件,而且该文件会被
        //创建到指定目录下,如果目录下已有同名文件将被覆盖!(创建文件)
          fw.write("abcdefghijkopstt");//调用write方法,将字符串写入流中
          //fw.flush(); //刷新后流可以继续使用!
          fw.close();//刷新后会将流关闭!
        }
        }
        写入流时,把close()方法注释掉后,也不影响结果,我又试了下,flush()去掉也不影响结果!
-----------------------------------------------------------------------------
这个如果没fw.flush(),也没fw.close(),数据是写不进去的,而写其中一个都会写入数据,flush()是把数据刷新到文件中的,而close()本身就自带flush()功能的;
写入时候可以不写flush(),但是最好写上close(),保证数据能正确写入;
还有,close()关闭流对象,可以释放没用的资源,否则流对象会一直在消耗内存,可能会造成内存溢出,我们写的小程序看起来没啥影响,但是好的习惯是必须的;

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
读写流的close()方法是为了关闭资源,你写的是小程序因此不写close()没太大影响,可如果是大的程序频繁进行读写操作,不关流的的话会占用大量内存导致程序死掉
而在写入流中的close()方法在关流之前会自动刷新,因此即使你注释了flush(),仍然可以写入数据
希望这对你有些帮助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马