日期:2014-05-20  浏览次数:20714 次

java里就不能在内存中创建File对象么??
这个问题困扰我好久了,以前也来csdn上发过贴,没一个回答得靠谱的,我现在很郁闷
想知道有什么办法能让File直接写在内存里,不出现在硬盘上
如果不得不重写FIle类的话,也请各位大大们说得详细一点,究竟该怎么重写
拜托啦!!!

------解决方案--------------------
为什么要这种需求?

看样子你只是需要一个内存中的流而已,

StringWriter
ByteArrayOutputStream等
------解决方案--------------------
楼主,可能有点钻牛角尖了
为什么一定非要File类呢?
只要能达到缓冲效果,都是可以的
你可以自己定义一个类,把数据以字符形式放在类实例里面
这个类,至少有两个方法
一个是put,一个是toFile
平常数据都put到类实例,肯定是在内存了
需要的时候,再toFile

------解决方案--------------------
好像回答过lz的问题,显然被认为不靠谱了。你可以把具体的接口都说一下,比如要读的一方具体要用什么方式读取,然后了解java哪些事情能做哪些不能做
------解决方案--------------------
呵呵 楼主挺好
------解决方案--------------------
public class File
extends Object
implements Serializable, Comparable<File>
文件和目录路径名的抽象表示形式。

你可以把内存映射成一个磁盘,这样这个文件就出现在“内存”中了。
不过为什么不能把文件写在磁盘里呢?用完在删掉不就好了
------解决方案--------------------
转换思路........................
------解决方案--------------------
1.File :文件和目录路径名的抽象表示形式。人家的定义就是说File是表示文件或目录... 你非要人家变为内存中的一个映射,你自己觉得自己的要求合理么?
2.限于对方接口的要求,你只好继承File了.那主要是看,对方用了File的什么方法.如果仅仅用了read.那你可以确定对方是菜鸟了,因为这种情况下,都是用InputStream作为接口参数的.就怕它用了getAbsolutePath() 之类,那你还给构造出一个虚拟的路径.
3.继承还是比较简单的,自己定义个字符数组或者字符串链表,依次实现方法就是了.一动手就能写出来.
------解决方案--------------------
楼主这只能说明你面向对象思想不过关哦
------解决方案--------------------
程序,不是编译通过就算结束了。各个包、类、接口、方法之间完全是根据彼此的契约来协作的。
假设程序是一台精密仪器,包、类、方法就是其大小不同的部件。说明书上说了,要#9螺丝,那就是#9螺丝,

同样,要File,那就是File,不是像楼上想像的那样重写一个就完事的。假设
Java code
public class Fooooo {
  public Fooooo(File file) {
     ..... new FileInputStream(file); // 这个你怎么办,要知道,FileInput/OutputStream的关键代码都是native的,你怎么重写。
  }
}

------解决方案--------------------
Common VFS 支持内存虚拟文件系统。只不过提供的是FileObject接口
------解决方案--------------------
探讨

Common VFS 支持内存虚拟文件系统。只不过提供的是FileObject接口

------解决方案--------------------
我本来也是建议暂存在硬盘上然后删掉,既然不行,那么最好还是把那边的参数类型换了,做出这种设计的家伙本身有问题了。java封装得挺严,本来是供大家使用方便的,你这么做是逆了java的本性而行啊。
------解决方案--------------------
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2044.html#Introduction
通过JNI完全可以做到!
------解决方案--------------------
楼主你对一些知识存在误区。
存储系统是OS来管理的,java也是只是调用OS的API来调用OS提供的功能,所以你提到的File本来就是OS的文件系统维护的一段硬件存储(一般都是磁盘、软盘、U盘之类的)。
File在java管理的jvm中只是一些检索信息而已。文件实体并不是java能直接涉及的。
所以java要访问文件的内容,它得通过OS的API去检索硬件存储,并阅读存储中指定位置的字节流。这个过程就是将流读到内存中。

楼主写过文件读取应该知道 byte buffer[]这个东西拉,把文件中所有的字节都读到内存无非就是读了一个很大的 byte fileContent[]。

楼主想做到内存文件系统取代硬盘的功能,我很想知道是什么样的需求?

缓存方法提速也是推荐使用内存、硬盘混合使用的。

如果是做搜索引擎用来使用内存储存索引文件信息,但这个方面貌似人家是有现成的实现的。不过人家有人家的信息格式。

内存本来就是珍贵的资源。


------解决方案--------------------
探讨

程序,不是编译通过就算结束了。各个包、类、接口、方法之间完全是根据彼此的契约来协作的。
假设程序是一台精密仪器,包、类、方法就是其大小不同的部件。说明书上说了,要#9螺丝,那就是#9螺丝,

同样,要File,那就是File,不是像楼上想像的那样重写一个就完事的。假设
Java code
public class Fooooo {
public Fooooo(File file) ……