如何创建存在于内存中文件,而不存在在实际硬盘上

J_CodeLiving 2010-11-18 11:52:03
原本我们创建文件读取文件时,都有起明确的路径和文件名,
但现在我的目的是,创建一个文件,但它只存在于缓存里,而实际的文件名和路径并不存在。

比如,我从DB得到一个byte[],要转成一个文件对象(File),但是又不能存放在磁盘上。


有没有什么办法????
...全文
375 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
凉岑玉 2010-11-19
  • 打赏
  • 举报
回复
使用文件的话我觉得不太可能··使用DataOutputstream和DataInputstream吧··
J_CodeLiving 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wjb_yd 的回复:]
引用 5 楼 j_codeliving 的回复:
引用 3 楼 lingxuch 的回复:
如要你不往硬盘上存文件,为何还要创建文件对象呢,如果你只是想把数据读到内存中可以这么做

//创建一个字节数组对象,这个对象可以当成一个内存缓存使用,可以往里面放字节进去
ByteArrayOutputStream bos=new ByteArrayOutputStream();
//通过wri……
[/Quote]

呵呵,有source code review
wjb_yd 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 j_codeliving 的回复:]
引用 3 楼 lingxuch 的回复:
如要你不往硬盘上存文件,为何还要创建文件对象呢,如果你只是想把数据读到内存中可以这么做

//创建一个字节数组对象,这个对象可以当成一个内存缓存使用,可以往里面放字节进去
ByteArrayOutputStream bos=new ByteArrayOutputStream();
//通过write方法往里放数据
bos.write("abc"……
[/Quote]

实在不行就创建个隐藏的文件作为临时对象,mail出去后,再把这个文件删掉。
J_CodeLiving 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qingralf 的回复:]
文件也只不过是个byte数组罢了.可以。直接需要的时候在输出流直接write这个byte数组就可以了。
[/Quote]

我知道,文件通过java读取到内存中,要么是字符串,要么是一个流。但是,我java mail提供的attached方法,接收的都是File Object,可能是底层为了记录文件格式属性等,方便mail server客户端在收到带有attached的邮件时,还原成文件。

所以,我现在是要把从数据库中取出的一个byte[],在内存中构建成一个虚拟文件,在作为邮件的附件,通过java Mail 发送。

qingralf 2010-11-19
  • 打赏
  • 举报
回复
文件也只不过是个byte数组罢了.可以。直接需要的时候在输出流直接write这个byte数组就可以了。
caofaping 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 j_codeliving 的回复:]
原本我们创建文件读取文件时,都有起明确的路径和文件名,
但现在我的目的是,创建一个文件,但它只存在于缓存里,而实际的文件名和路径并不存在。

比如,我从DB得到一个byte[],要转成一个文件对象(File),但是又不能存放在磁盘上。


有没有什么办法????
[/Quote]

楼主准备用在什么地方?
J_CodeLiving 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lingxuch 的回复:]
如要你不往硬盘上存文件,为何还要创建文件对象呢,如果你只是想把数据读到内存中可以这么做

//创建一个字节数组对象,这个对象可以当成一个内存缓存使用,可以往里面放字节进去
ByteArrayOutputStream bos=new ByteArrayOutputStream();
//通过write方法往里放数据
bos.write("abc".getBytes());
bos.wri……
[/Quote]

我其实是需要把,数据库中 byte[] 转换成一个文件,而且把这个文件作为MAIL的一个attached 文件,发出去? 但是由于数据安全,所以不能写在物理磁盘上。

bastengao 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lingxuch 的回复:]

如要你不往硬盘上存文件,为何还要创建文件对象呢,如果你只是想把数据读到内存中可以这么做

//创建一个字节数组对象,这个对象可以当成一个内存缓存使用,可以往里面放字节进去
ByteArrayOutputStream bos=new ByteArrayOutputStream();
//通过write方法往里放数据
bos.write("abc".getBytes());
bos.wr……
[/Quote]+1
lingxuch 2010-11-19
  • 打赏
  • 举报
回复
如要你不往硬盘上存文件,为何还要创建文件对象呢,如果你只是想把数据读到内存中可以这么做

//创建一个字节数组对象,这个对象可以当成一个内存缓存使用,可以往里面放字节进去
ByteArrayOutputStream bos=new ByteArrayOutputStream();
//通过write方法往里放数据
bos.write("abc".getBytes());
bos.write("efg".getBytes());
//数据放好后可以用toByteArray得到所有数据组合成的一个字节数组
System.out.println(new String(bos.toByteArray()));

bos对象相当一个无限大的容器,你可以把任意多的数组放到里面,等你放好了之后就可以用其提供的toByteArray方法得到完整的字符数组
J_CodeLiving 2010-11-18
  • 打赏
  • 举报
回复
有人之前这么做过的吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧