实现将一个目录用JAVA压缩成一个文件后,然后在客户端读取这个压缩文件中的被压缩的一个个文件,

cql0007 2003-10-18 12:56:54
做了一个APPLET,在APPLET内要读取服务器上的文件(文件个数很多,几个到十几个),大小不定(几M到十几M之间),现在做的是直接读取服务器的文件(文件是文本文件),感觉速度很慢。
看到不少资料讲可以将要读的文件打成一个压缩文件放大服务器上,然后客户端直接获得这个压缩文件的输入流(我现在用的是url来连接服务器上的文件的),然后在这个输入流里分出这个压缩文件里共有几个文件,一个个读取出来,不知行不行,该如何做了?
主要是解压缩这部分的,没看到这方面的资料的。

非常感谢!
...全文
142 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
listlike 2003-10-29
  • 打赏
  • 举报
回复
接分
cql0007 2003-10-24
  • 打赏
  • 举报
回复
难道就没有办法把文件先在服务器上压缩好,在客户端读出来再解压的吗
pleonheart 2003-10-21
  • 打赏
  • 举报
回复
这也行啊,太牛了,mark!
cql0007 2003-10-21
  • 打赏
  • 举报
回复
难道这个问题不能直接用从服务上获得的一个URL,然后再由URL获得一个输入流来处理的吗?
honkyjiang 2003-10-21
  • 打赏
  • 举报
回复
就放在内存吧 ! 你把读来的东东用变量保存在处理就是了
cql0007 2003-10-21
  • 打赏
  • 举报
回复
网上老见有文章说可以对一文件进行压缩后再传输再读,可以节省很多的时间,到底怎么处理啊?????
cql0007 2003-10-20
  • 打赏
  • 举报
回复
关键问题是我这里不太会处理:
我本来读文件的代码:
URL[] urls = new URL[3];
urls[0] = new URL(getCodeBase(),"a.txt");
urls[1] = new URL(getCodeBase(),"b.txt");
urls[2] = new URL(getCodeBase(),"c.txt");
for(int i=0;i<urls.length;i++){
readLine(urls[i])//调用读文件的方法
}

public void readLine(URL url){
DataInputStream in;
try{
in = new DataInputStream(url.openStream());
}catch(Exception e){
e.printStackTrace();
//然后用in.readLine()得到我想要的数据,再将数据存入内存变量中去;

}
}
请教:如果我开始将0.txt,1.txt,2.txt压缩成一个压缩文件,如zip.xy;那么我在这里读文件的时候该如何处理了?
谢谢了!
cql0007 2003-10-20
  • 打赏
  • 举报
回复
可问题是:服务端的程序不能任意读写本地文件的啊,只能是放在服务器上,可放在服务器上我就不知怎么处理了.
qljsd 2003-10-20
  • 打赏
  • 举报
回复
zipFile也是一个文件呀,你就按你原来对文件的方式从网上把这个文件先读出来放在本地(其实可以是任何你想放的地方),在用本地处理就行啦!
cql0007 2003-10-20
  • 打赏
  • 举报
回复
在本地压缩和在本地解压缩的我已经做好了.
但是现在我把它应用在网络上不会处理了.
Enumeration entries;
ZipFile zipFile;

try {
zipFile = new ZipFile("????");//我的这个压缩文件是网络服务器上的,这里怎么弄?
entries = zipFile.entries();
while(entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry)entries.nextElement();
zipFile.getInputStream(entry)
whyxx 2003-10-18
  • 打赏
  • 举报
回复
已经测试过的,直接拿来用就是了,函数参数第一个是要解压的文件,第二个是解开的文件放置的目录
cql0007 2003-10-18
  • 打赏
  • 举报
回复
多谢老兄了,我刚学JAVA,能不能帮忙加点注释啊,越详细越好的,呵呵
whyxx 2003-10-18
  • 打赏
  • 举报
回复
解压缩很简单啊
public static void extractFile(String fileName, String outDir) throws IOException {
try {
BufferedOutputStream dest = null;
BufferedInputStream is = null;
ZipEntry entry;
ZipFile zipfile = new ZipFile(fileName);
Enumeration e = zipfile.entries();

if (outDir == null || outDir.equals("")) {
int k = fileName.lastIndexOf(FILE_SEPARATOR);
if (k >= 0) {
outDir = fileName.substring(0, k);
}
}
File outFile = new File(outDir);
outFile.mkdir();
while (e.hasMoreElements()) {
entry = (ZipEntry) e.nextElement();
String tempFileName = outDir + System.getProperty("file.separator")+ entry.getName();
System.out.println(tempFileName);
File tempFile = new File(tempFileName);
if (entry.isDirectory()) {
tempFile.mkdir();
continue;
} else {
File aa = new File(tempFile.getParent());
aa.mkdir();
}
is = new BufferedInputStream(zipfile.getInputStream(entry));
int count;
byte data[] = new byte[BUFFER];
FileOutputStream fos = new FileOutputStream(tempFile);
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = is.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
}
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}

62,614

社区成员

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

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