黑马程序员技术交流社区

标题: IO操作 [打印本页]

作者: 山水游客    时间: 2012-6-21 21:17
标题: IO操作
本帖最后由 孙胜录 于 2012-6-21 22:04 编辑

通过IO流往文件里写入东西,如果内存不足时会报错,如何确定磁盘空间是否可以顺利写入?
如果操作完了,不关闭流,JVM会自动关闭流吗?

作者: 张文强    时间: 2012-6-21 21:40
  1. File file c = new File("C:\\");        //你要往哪个盘写数据就改成哪个盘符
  2. System.out.println(filec.getFreeSpace()/(1024*1024*1024));        //确定磁盘空间是否可以顺利写入首先要获取可用空间(这是转换成GB,可自己修改)
  3. System.out.println(filec.getTotalSpace()/(1024*1024*1024));        //获取总空间
复制代码
第二个问题  jvm不会关闭
举个例子比如你将一个10MB的word文档转换成流,然后进行分析存储到数据库一样它是将这10MB的东西读到内存,然后进行处理,如果你在使用的时候不关闭那么java就认为你是一直在使用而不进行垃圾回收那么就占你10MB的内存这样有可能导致内存溢出

作者: 刘笑    时间: 2012-6-21 22:02
要想顺利写入磁盘,首先确定磁盘剩余空间打下,以下为判断剩余磁盘大小的方法:
如果你用的是JDK1.6的话,那就很容易了 File.getFreeSpace() ,getUsableSpace()等很多方法可以让你用的
如果你用的是1.5或者以下的话,就只有依靠JNI本地调用来得到空间了 。一般用Runtime只能得到JVM的空间大小
freeMemory()    返回   Java   虚拟机中的空闲内存量。
maxMemory()   返回   Java   虚拟机试图使用的最大内存量。
totalMemory()  返回   Java   虚拟机中的内存总量。

JVM也许会帮你回收这个流的引用,它甚至还会帮你释放这个流对象所占的内存单元,但是它不会去调用close方法去帮你关闭流。而在close方法中会释放文件资源。注意释放资源和垃圾回收是两码事,即使对象不存在了,而这个对象事先占用的一些资源,仍然会被继续占用着,你必须得手工释放。如果不手工释放的话可能发生很多种情况,比如可能在JVM退出Main方法时释放,可能远程的一个程序等了30分钟后自动关闭socket, 可能在你重启电脑时释放。也可能发生别的情况




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2