黑马程序员技术交流社区
标题:
IO操作
[打印本页]
作者:
山水游客
时间:
2012-6-21 21:17
标题:
IO操作
本帖最后由 孙胜录 于 2012-6-21 22:04 编辑
通过IO流往文件里写入东西,如果内存不足时会报错,如何确定磁盘空间是否可以顺利写入?
如果操作完了,不关闭流,JVM会自动关闭流吗?
作者:
张文强
时间:
2012-6-21 21:40
File file c = new File("C:\\"); //你要往哪个盘写数据就改成哪个盘符
System.out.println(filec.getFreeSpace()/(1024*1024*1024)); //确定磁盘空间是否可以顺利写入首先要获取可用空间(这是转换成GB,可自己修改)
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