站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题为什么csdn里我发的帖子总没人回复?

为什么csdn里我发的帖子总没人回复?

摘要: 为什么csdn里我发的帖子总没人回复?


为什么csdn里我发的帖子总没人回复?不管我给100.50.20分,回的人都很少!我的问题总得不到解决!这是怎么回事??


可能你说的问题不清楚或是人家回答你问题了你总不给分或是你问的问题没有人能回答上~~~


只能说你提的问题太难了,或者你发错版了


问题描述清楚!


问题太难?别人不会;
问题太大?别人没时间


可能你说的问题不清楚,或者你问的问题太难了,或者你发错误地方了,消息扣你的信誉分,我的都是发错版扣的,唉


你可以把题目弄个散分,500分,肯定有人回,呵呵


为什么要把分数搞那么高呢?说明分数高的就是好样的吗?太虚荣了吧,在这里如果只是为了分数而帮别人,那算了,不要回答了,去工作争钱吧,在这里只能耽误你的时间。个人意见!


为什么你发的帖子就一定要有人回答?


为什么你发的帖子就一定要有人回答?


那我现在有问题问下大家啊!一个基本的问题啊!关于用java解压缩zip文件,大家看下哪里写错了!我实在是不知道该怎么改我的程序了:
我要求把e://XML_exa.zip解压到e:/XML_exa文件下
package com.javaftp;

import java.io.*;

import java.util.zip.*;

public class UnZip {

static final int BUFFER = 2048;

public static void main (String argv[]) {

try {

BufferedOutputStream dest = null;

FileInputStream fis = new FileInputStream("e://XML_exa.zip");

ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));

ZipEntry entry;

while((entry = zis.getNextEntry()) != null) {

System.out.println("Extracting: " +entry);

int count;

byte data[] = new byte[BUFFER];

/*write the files to the disk
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
*/
FileOutputStream fos = new FileOutputStream("e://XML_exa");

/*BufferedOutputStream(OutputStream out, int size)
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基础输出流。
*/
dest = new BufferedOutputStream(fos, BUFFER);

while ((count = zis.read(data, 0, BUFFER)) != -1) {

dest.write(data, 0, count);

}
//刷新此缓冲的输出流。
dest.flush();

dest.close();

}

zis.close();

} catch(Exception e) {

e.printStackTrace();

}}

}
为什么我
e://XML_exa文件为0字节,我到底哪里写错了?怎么改呢?请大家把改好的程序帖出来,最好测试过的!谢谢!


你的程序,我运行了一下,基本正确,但:
FileOutputStream fos = new FileOutputStream("e://XML_exa");
输出文件名是固定的,写第二个文件时,第一个文件的内容就被覆盖了。

建议,先创建一个子目录,如"e://XML_exa",
再FileOutputStream fos = new FileOutputStream("e://XML_exa//" + entry.getName());



我没创建子目录,只改了这一句:
FileOutputStream fos = new FileOutputStream("e://XML_exa_" + entry.getName());
在e盘下生成了若干个以"XML_exa_"开头的文件。


回你一个


已测试

public static void main(String argv[]) {
try {
String fileName = "d://XML_exa.fff.p.zip"; //待解压缩的文件名
File file = new File(fileName);

//从文件名中提取出子目录(路径)名
int n=fileName.lastIndexOf(".");
String folderName = fileName.substring(0,n);
File folder = new File(folderName);
folder.mkdir(); //创建子目录(路径)

System.out.println(folderName);
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;

while((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
/*write the files to the disk
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
*/
FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());
/*BufferedOutputStream(OutputStream out, int size)
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基础输出流。
*/
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
//刷新此缓冲的输出流。
dest.flush();
dest.close();
}
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}


我写的压缩程序同样遇到了路经问题!

package com.javaftp;
import java.io.*;

import java.util.zip.*;
public class Zip {
public static void main(String[] args) {
try {
FileOutputStream f = new FileOutputStream("f://810.zip");
ZipOutputStream out = new ZipOutputStream(new DataOutputStream(f));
for (int i = 0; i < args.length; i++) {
System.out.println("Writing file " + args[i]);
DataInputStream in = new DataInputStream(new FileInputStream(args[i]));
out.putNextEntry(new ZipEntry(args[i]));
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}


/*测试数据:命令行方式
e:/>javac com/javaftp/Zip.java
e:/>java com.javaftp.Zip f:/html/*.*
*/

我html文件夹下面是四个.html文件,为什么压缩文件810.zip的路经是810.zip/f:/html 请问中间的那个f:是怎么回事啊??怎样去掉那个f:呢?我测试java com.javaftp.Zip f:/html/*.*中间的f肯定要写的啊!


String entry=args[i];

//把前边的“x:/”去掉
if (entry.charAt(1)==':')
entry=entry.substring(3);

out.putNextEntry(new ZipEntry(entry));


你那个要压缩程序如果要压整个文件夹的所有文件的话得递归:

public static void ZipFiles(String pm_sFilePath)
{
try
{
FileOutputStream f = new FileOutputStream("f://810.zip",true);
ZipOutputStream out = new ZipOutputStream(new DataOutputStream(f));

File file = new File(pm_sFilePath);

if(file.isFile())
{
DataInputStream in = new DataInputStream(new FileInputStream(file.getAbsolutePath()));
out.putNextEntry(new ZipEntry(file.getName()));
int c;
while ((c = in.read()) != -1)
{
out.write(c);
}
in.close();
out.close();
}
else
{
String [] fileNames = file.list();
for(int j=0;j {
File subFile = new File(pm_sFilePath+"//"+fileNames[j]);
if(subFile.isFile())
{
DataInputStream in = new DataInputStream(new FileInputStream(subFile.getAbsolutePath()));
out.putNextEntry(new ZipEntry(subFile.getName()));
int c;
while ((c = in.read()) != -1)
{
out.write(c);
}
in.close();
}
else if(subFile.isDirectory())
{
ZipFiles(fileNames[j]);
}
}


out.close();

}


}
catch(IOException es)
{
System.out.println("IO操作异常!");
es.printStackTrace();

}
}


trumplet(检查) 大哥:
我用你的程序测试为什么就是错的啊!

package com.javaftp;
import java.io.*;

import java.util.zip.*;
public class UnZip {
static final int BUFFER = 2048;

public static void main(String argv[]) {
try {
String fileName = "f://new.zip"; //待解压缩的文件名
File file = new File(fileName);

//从文件名中提取出子目录(路径)名
int n=fileName.lastIndexOf(".");
String folderName = fileName.substring(0,n);
File folder = new File(folderName);
folder.mkdir(); //创建子目录(路径)

System.out.println(folderName);
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;

while((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
/*write the files to the disk
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
*/
FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());
/*BufferedOutputStream(OutputStream out, int size)
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基础输出流。
*/
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
//刷新此缓冲的输出流。
dest.flush();
dest.close();
}
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}

报错如下:
f:/new
Extracting: html/about.html
java.io.FileNotFoundException: f:/new/html/about.html (系统找不到指定的路径。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:179)
at java.io.FileOutputStream.(FileOutputStream.java:70)
at com.javaftp.UnZip.main(UnZip.java:34)

f://new.zip 是我把我电脑里一个叫html的文件夹压缩而成的,html文件夹下放了几个.html文件。这路经问题到底该如何解决啊!!头疼啊!



你的new.zip里有子目录,此前我没考虑到。


/*write the files to the disk
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
*/
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//加上这4句话:
String subDirName=folderName + "//" + new File(entry.getName()).getParent();
File subDir = new File(subDirName);
System.out.println(subDir.getAbsolutePath());
subDir.mkdirs();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());


trumplet(检查) 大哥,程序还有些问题啊!

package com.javaftp;
import java.io.*;

import java.util.zip.*;
public class UnZip {
static final int BUFFER = 2048;

public static void main(String argv[]) {
try {
String fileName = "f://new.zip"; //待解压缩的文件名
File file = new File(fileName);

//从文件名中提取出子目录(路径)名
int n=fileName.lastIndexOf(".");
String folderName = fileName.substring(0,n);
File folder = new File(folderName);
folder.mkdir(); //创建子目录(路径)

System.out.println(folderName);
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;

while((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
/*write the files to the disk
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
*/
String subDirName=folderName + "//" + new File(entry.getName()).getParent();
File subDir = new File(subDirName);
System.out.println(subDir.getAbsolutePath());
subDir.mkdirs();
FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());
/*BufferedOutputStream(OutputStream out, int size)
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基础输出流。
*/
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
//刷新此缓冲的输出流。
dest.flush();
dest.close();
}
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
程序输出及报错如下:

f:/new
Extracting: html/about.html
f:/new/html
Extracting: html/link.html
f:/new/html
Extracting: html/photo.html
f:/new/html
Extracting: html/profile.html
f:/new/html
Extracting: html/
f:/new/null
java.io.FileNotFoundException: f:/new/html (拒绝访问。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:179)
at java.io.FileOutputStream.(FileOutputStream.java:70)
at com.javaftp.UnZip.main(UnZip.java:38)
我的f盘里是出了个new文件夹,但此文件夹中有两个文件夹,一个叫html,一个叫null,那个null是多余的?
怎么去除呢?
而且我发现这个程序不是对每个文件解压缩都起效果的!
我做的测试:我把html文件夹,11.xml文件,22.txt文件,三个文件做成的aa.zip用上面的程序进行解
压,我发现存在以下问题:
1)还是多了一个null文件夹
2)22.txt文件根本没解压出来!解压后的文件夹aa下面根本没22.txt文件。
是不是解压程序不支持.txt文件格式?
如果我换成其它后缀的文件呢?如.cgm,.prot跟格式的文件呢?




不要把所有问题都要别人帮你解答,自己不思考别人也不会理你的.
这是我个人想法


我测试时,已没有问题,第一次用2个txt文件压缩成1个zip,第二次用2个html和一个子目录(内含另外2个html)压缩成一个zip,至于null,我想,是否是你的zip文件本身的问题呢?


while((entry = zis.getNextEntry()) != null ) {

if (entry.isDirectory()) continue; //加上这句
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
/*write the files to the disk
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
*/
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~改下面这几句
File f1 = new File(entry.getName());
if (f1.getParent()!=null){
String subDirName=folderName + "//" + f1.getParent();
File subDir = new File(subDirName);
System.out.println(subDir.getAbsolutePath());
subDir.mkdirs();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());


这次,我又多了一层子目录,应该没问题了吧


说出一个回复的理由


经典问题


trumplet(检查)大哥真是好人啊!看来是多层目录的问题!我把我改好的程序加上了注解您看下,我还有两个问题想问下:

package com.javaftp;
import java.io.*;

import java.util.zip.*;
public class UnZip {
static final int BUFFER = 2048;

public static void main(String argv[]) {
try {
String fileName = "f://bb.zip"; //待解压缩的文件名

/*
* 创建一个File实例file

public class File 为文件和目录路径名的抽象表示形式。
构造方法File(String pathname)
通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。
*/
File file = new File(fileName);

//从文件名中提取出子目录(路径)名
//lastIndexOf(String str)返回在此字符串中最右边出现的指定子字符串的索引
int n=fileName.lastIndexOf(".");
String folderName = fileName.substring(0,n);
System.out.println(n);
File folder = new File(folderName);
// boolean mkdir() 创建此抽象路径名指定的目录 ,本例为f:/new
folder.mkdir(); //创建子目录(路径)

System.out.println(folderName);
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
//ZipEntry类用于表示 ZIP 文件条目
ZipEntry entry;

// getNextEntry() 读取下一个 ZIP 文件条目并将流定位到该条目数据的开始处
while((entry = zis.getNextEntry()) != null) {
if (entry.isDirectory()) continue;
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
/*write the files to the disk
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
*/
// String subDirName=folderName + "//" + new File(entry.getName()).getParent();
// System.out.println(entry.getName());
// File subDir = new File(subDirName);
// System.out.println(subDir.getAbsolutePath());
// subDir.mkdirs();
//
File f1 = new File(entry.getName());
if (f1.getParent()!=null){
String subDirName=folderName + "//" + f1.getParent();
File subDir = new File(subDirName);
System.out.println(subDir.getAbsolutePath());
subDir.mkdirs();
}

FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());
/*BufferedOutputStream(OutputStream out, int size)
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基础输出流。
*/
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
//刷新此缓冲的输出流。
dest.flush();
dest.close();
}
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}



我的问题:

1) //lastIndexOf(String str)返回在此字符串中最右边出现的指定子字符串的索引
int n=fileName.lastIndexOf(".");
请问上句话中的此字符串是指的是"."吗?最右边指定的子字符串又指的是什么?为什么n的结果是6?
2)我从程序的输出结果看
entry是指 html/about.html
entry.getName()也是指html/about.html
为什么entry和entry的名称是一样的呢?
既然一样我把这句话改了:
FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());
我改成
FileOutputStream fos = new FileOutputStream(folderName + "//" + entry);
我测试过这样也对!
请问到底是怎么回事??





可以查看api里的解释,其实,我也是从api里查的。

1:int n=fileName.lastIndexOf(".");
引号里的字符串是"."(小数点),从字符串(这里是fileName)右边开始找子串".",并返回它所在的位置。如:"html/about.html".lastIndexOf(".")返回10

2:FileOutputStream fos = new FileOutputStream(folderName + "//" + entry);
我认为,你这样写,可能是因为要与字符串连接而调用了entry.toString(),从api可以看出,ZipEntry类重写了toString方法,该类的源码里是这样的:
public String toString() {
return getName();
}
可见toString()就是getName()。我觉得,写成entry.getName()会明确一些,增加可读性。


学习



我写的压缩的程序也有些问题的:程序清单如下:

package com.javaftp;
import java.io.*;

import java.util.zip.*;
public class Zip {
public static void main(String[] args) {
try {
FileOutputStream f = new FileOutputStream("f://110.zip");
ZipOutputStream out = new ZipOutputStream(new DataOutputStream(f));
for (int i = 0; i < args.length; i++) {
System.out.println("Writing file " + args[i]);
DataInputStream in = new DataInputStream(new FileInputStream(args[i]));
out.putNextEntry(new ZipEntry(args[i]));
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

我测试如下:
java com/javaftp/Zip.java

java com.javaftp.Zip e:/html/*.* 这时是正常的
但是我要把html 文件夹下在放一个new子文件夹的时候,就报e:/html/new拒绝访问了!
我要想把我html文件夹压缩该怎么办呢?我看到上面的帖子有人说用递归做?大哥能不能把压缩的程序清单也写一下啊!谢谢了!



有人回了吧,那我就不回啦...


要压缩含子目录的文件夹,要递归。我一时半会做不出来。


我也想下,您也想下,这几天想出来就行了!谢谢你啊!


呵呵,这两天有点焦头烂额,只路过友情UP一下


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
*
* @author Trumplet
*/
public class ZIP {
public static void ZipFile(File fileToZip, ZipOutputStream zos){
try {
String path = fileToZip.getPath();
if (path.charAt(1)==':') path = path.substring(3);
zos.putNextEntry(new ZipEntry(path));
FileInputStream fis = new FileInputStream(fileToZip);
int c;
while ((c = fis.read()) != -1)
zos.write(c);
fis.close();
zos.closeEntry();
} catch (Exception ex) {
ex.printStackTrace();
}

}
public static void findSubFiles(String start,ZipOutputStream zos){
System.out.println(start);
File fileStart = new File(start);
if (fileStart.isFile()) {
ZipFile(fileStart,zos);
return;
}
String[] subFn = fileStart.list();
for (int i=0;i File subFile = new File(start + "//" + subFn[i]);
if (subFile.isFile()){
ZipFile(subFile,zos);
System.out.println(subFile.getName());
} else
findSubFiles(start + "//" + subFile.getName(),zos);
}
}

public static void main(String[] args) {
try {
//String[] folders = args;
String[] folders = {"d://1111"};
FileOutputStream fos = new FileOutputStream("d://110.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
for (int i = 0; i < folders.length; i++) {
System.out.println("Writing file " + folders[i]);
findSubFiles(folders[i],zos);
}
zos.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}



楼主搞这么题目骗取同情的吗?把没人回你的帖子的地址粘贴出来。像这个帖子至少该出50分,你出20分加这个题目,什么意思?


我加分啊!!


trumplet(检查) 大哥,您好象没用递归一样做出来了啊!大哥真是高手啊!大哥能不能把压缩的程序加上注解啊,我得好好研究一下!谢谢拉!


对了,我msn:mengnansoftware@hotmail.com
qq:42649056


用递归了,findSubFiles()就是递归方法。


public static void findSubFiles(String start,ZipOutputStream zos){
System.out.println(start);
File fileStart = new File(start);
//要压缩的(zos),如果是一个文件,调用ZipFile压缩之,然后返回
if (fileStart.isFile()) {
ZipFile(fileStart,zos);
return;
}
//如果不是文件,就是子目录,执行下面的操作
String[] subFn = fileStart.list(); //取出该子目录下的文件名和子目录名
// 下面的 for 处理这些文件或子目录
for (int i=0;i File subFile = new File(start + "//" + subFn[i]);
if (subFile.isFile()){ //如果是一个文件,调用ZipFile压缩之
ZipFile(subFile,zos);
System.out.println(subFile.getName());
} else //不是文件,就是子目录,递归之,再找。
findSubFiles(start + "//" + subFile.getName(),zos);
}
}


//要压缩的( start ),如果是一个文件,调用ZipFile压缩之,然后返回


trumplet(检查)大哥,如果我要用JUnit编写测试程序,来对我写的程序进行测试,测试程序该怎么写呢?


惭愧得很,我不会JUnit


没关系拉!我看书上说从文件输入. 输出流中读写数据有两种方式 ,我们用的是第一种方式就是直接利用 FileInputStream 和 FileOutputStream 自身的读写功能;第二种是 以 FileInputStream 和 FileOutputStream 为原始数据源 ,在套接上其它功能较强大的输入,输出流完成文件的读写操作.为了能更方便地从文件中读写不同类型的数据,一般用第二种方式,常用的是用过滤流的两个子类 DataInputStream和DataOutputStream ,trumplet(检查) 大哥,是不是如此??


trumplet(检查) 大哥,那你做白盒测试一般用什么呢?


我是业余的,程序编出来,用真实数据测试。很笨的方法。


现在的人都是要分数的,


谁能用JUnit对我的压缩解压程序编个测试程序呢?


trumplet(检查) 大哥,您对xml技术熟悉吗?我有个很疑惑的问题,我贴子发到Web Services / XML 里了,名字叫" 急!!计算xml文档的结点数时怎样忽略掉空白结点???在线等!! ",您可以去看下!谢拉!!


谁能用JUnit对我的压缩解压程序编个测试程序呢?我想测试下!谢谢了!在等两天,没人回就揭贴了!


你已经不错了,我的贴子发上去以后就哪也找不到了。还不如你呢!


thinker28754() 先生,看下我Web Services / XML 里了,名字叫" 急!!计算xml文档的结点数时怎样忽略掉空白结点???在线等!! 的一个贴子吧,帮我解决下问题!谢谢了!


晕,啊


cleansunshing(中文) ,你昏个啥啊!您对sax熟悉吗?


这几天对我的压缩解压程序做测试,发现我写的程序不支持中文文件名和中文的路径名!一压缩和解压中文的文件和路经名就报错的!不知哪位高手有解决的办法呢?谢谢!


不是高手得让你累死..


现在还有两个问题没解决,一个是压缩解压不支持中文,第二junit测试程序不知道怎么写!不知道啥时候才能解决啊!急死了!


现在我的压缩程序中文问题解决了!可是解压缩程序没解决!jdk的zip包不支持中文!我用的是ant.jar里的zip包,可是这个zip包里只有zipOutputStream,没有zipInputStream,所以我的解压缩程序遇到了困难!!谁知道哪个包里有支持中文的ZipInputStream!!!


高手!


我是菜鸟啊!!楼上的高手帮我解决下问题啊!谢拉!


最近发现我写的程序好多bug,我的解压缩程序只能在一个盘符下解压缩成功!如果要解压到其它的磁盘下时就报错!

FileOutputStream fos = new FileOutputStream(folderName + "// " + entry.getName());
我把上面的folderName换成 “c://AA” 为什么就不行??我上面程序的folderName 不就是“f://bb”吗?我换一下为什么就报错!郁闷!!


有问必回,只要知道的


treeway(趣玩) ( ) ,你帮我看看我的程序到底哪里有问题?我的解压的只能解压到我.zip文件所在的磁盘,不能解压到其它的磁盘?比如我的 e:/aa.zip只能解压到e:/下,不能解压到其它盘比如c:,d:等,这是怎么回事啊?程序如下:
package com.javaftp;


import java.io.*;

import java.util.zip.*;
public class UnZip {
static final int BUFFER = 2048;

public static void main(String argv[]) {
try {
String fileName = "e://aa.zip"; //待解压缩的文件名

/*
* 创建一个File实例file

public class File 为文件和目录路径名的抽象表示形式。
构造方法File(String pathname)
通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。
*/
File file = new File(fileName);

//从文件名中提取出子目录(路径)名
//lastIndexOf(String str)返回在此字符串中最右边出现的指定子字符串的索引
int n=fileName.lastIndexOf(".");
String folderName = fileName.substring(0,n);
System.out.println(n);
File folder = new File(folderName);

folder.mkdir(); //创建子目录(路径)

System.out.println(folderName);
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
//ZipEntry类用于表示 ZIP 文件条目
ZipEntry entry;

// getNextEntry() 读取下一个 ZIP 文件条目并将流定位到该条目数据的开始处
while((entry = zis.getNextEntry()) != null) {
if (entry.isDirectory()) continue;
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
/*write the files to the disk
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
*/

File f1 = new File(entry.getName());
if (f1.getParent()!=null){
String subDirName=folderName + "//" + f1.getParent();
File subDir = new File(subDirName);
System.out.println(subDir.getAbsolutePath());
subDir.mkdirs();
}

FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());
/*BufferedOutputStream(OutputStream out, int size)
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基础输出流。
*/
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
//刷新此缓冲的输出流。
dest.flush();
dest.close();
}
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
我这个程序只能解压到e:/下,怎么解压到c:/AA目录下呢?
我觉得是 FileOutputStream fos = new FileOutputStream(folderName + "//" + entry.getName());的问题,可我改不好!大家帮帮我,怎么改啊!!我郁闷了很久了!大家测试的时候一定要拿多层目录测试!


精神可嘉!
不过,这样盯着人问,哪个不怕啊?
一语惊醒梦中人,有那么关键的一语两语就够了,看你这架势,还要别人帮你测试,晕!


是阿是阿,楼主好可怕啊?!

我很理解楼主急切的心情,我也经常没人理 :( ,但是还是应该多思考多搜索,这样才是自己的东西。


都5月份的帖子,到了6月份,LZ咋还不给人分捏,这样似乎不厚道吧????


↑返回目录
前一篇: JAVA程序员求职。。。。。。。。
后一篇: jsp中怎样得到该值??