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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-6-21 21:17  /  1324 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙胜录 于 2012-6-21 22:04 编辑

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

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
  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的内存这样有可能导致内存溢出
回复 使用道具 举报
要想顺利写入磁盘,首先确定磁盘剩余空间打下,以下为判断剩余磁盘大小的方法:
如果你用的是JDK1.6的话,那就很容易了 File.getFreeSpace() ,getUsableSpace()等很多方法可以让你用的
如果你用的是1.5或者以下的话,就只有依靠JNI本地调用来得到空间了 。一般用Runtime只能得到JVM的空间大小
freeMemory()    返回   Java   虚拟机中的空闲内存量。
maxMemory()   返回   Java   虚拟机试图使用的最大内存量。
totalMemory()  返回   Java   虚拟机中的内存总量。

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

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马