Java Can';无法从DataInputStream获取zip条目
我必须解压一个通过URL寻址的zip数据包。(URL和DataInputStream是正确的!) 但是不可能获得任何zip条目。(第一个zip条目为空!) 使用FileOutputStream,它工作得非常好。由于效率问题,我不允许将文件存储在电脑上Java Can';无法从DataInputStream获取zip条目,java,zip,fileinputstream,datainputstream,Java,Zip,Fileinputstream,Datainputstream,我必须解压一个通过URL寻址的zip数据包。(URL和DataInputStream是正确的!) 但是不可能获得任何zip条目。(第一个zip条目为空!) 使用FileOutputStream,它工作得非常好。由于效率问题,我不允许将文件存储在电脑上 有人有想法吗?最可能的问题是如何获取作为dis传递给unZipIt()方法的输入流 您不应该收到DataInputStream,而应该收到一个简单的InputStreamZipInputStream既不使用也不期望输入为DataInputStrea
有人有想法吗?最可能的问题是如何获取作为
dis
传递给unZipIt()方法的输入流
您不应该收到DataInputStream
,而应该收到一个简单的InputStream
ZipInputStream
既不使用也不期望输入为DataInputStream
此外,在保存条目内容时,您应该只读取(并保存)与条目长度相同的字节,直到有更多字节。upps。我没有复制最后一个{关闭方法-但它肯定在那里;)你能显示代码块“unZipIt”吗调用以及如何初始化DataInputStream?调用此方法时,您可能已经位于流的末尾。您需要关闭FileOutputStream,否则会泄漏文件描述符。DataInputStream是url.openStream()-url是正确的!调用UnzipIt(…)的函数是:private boolean unzipAllFiles()抛出ZipException{File savDir=vManager.getSaveDir();System.out.println(“saveDir:+savDir.getPath());如果(!savDir.exists()){savDir.mkdir();}请尝试{unZipIt(savDir,dis,pos);}捕获(ZipException e){throw e;}返回true;}InputStream作为参数也不起作用。谢谢你的提示。如果它开始起作用,我会试试:你必须向我们展示如何创建/获取传递给unZipIt()
方法的dis
输入流,错误很可能不在发布的代码中。URL URL=new URL(fileDownloadDir);URLConnection con=url.openConnection();DataInputStream dis=newdatainputstream(url.openStream());好的,那么您需要做的就是将url.openStream()
作为dis
传递给您的unZipIt()
方法,并且所有这些都应该可以工作-假设url
指向有效的zip文件。现在我将url.openStream()传递给unZipIt()但第一个条目仍然为空:(
private void unZipIt(File baseDir, DataInputStream dis, PipedOutputStream pos) throws ZipException
{
byte[] buffer = new byte[1024];
String fileName = "";
File newFile;
FileOutputStream fos = null;
try
{
ZipInputStream zis = new ZipInputStream(dis);
ZipEntry ze = zis.getNextEntry();
if(ze==null)
{
System.out.println("first zip entry is null");
}
while (ze != null)
{
System.out.println("zip entry is not null");
fileName = ze.getName();
newFile = new File(baseDir + File.separator + fileName);
if (isSavFile(fileName))
{
System.out.println(fileName + "is savfile");
new File(newFile.getParent()).mkdirs();
fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0)
{
fos.write(buffer, 0, len);
}
// fos.close();
}
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
// return true;
}
catch (IOException e)
{
// ex.printStackTrace();
log.error("unzipping '" + fileName + "'", e);
throw new ZipException(fileName, e);
// return false;
}