我正在尝试压缩在字符串上转换的Xml列表,将它们保存在一个zip文件中,并在restful上作为POST的正文返回。但每次保存文件时,我都会收到错误消息“存档格式未知或已损坏”。protectedByteArrayOutputStreamzip(MapmapConvertedXml){ByteArrayOutputStreambaos=newByteArrayOutputStream();ZipOutputStreamzos=newZipOutputStream(baos);try{for(Map.Entrycurrent:mapConvertedXml.entrySet()){Zip
在我的申请中没有特定投标的文件(pdf)。我需要从这些pdf文件创建一个zip文件并允许用户下载它。应用程序是在JavaEE中使用struts和mysql完成的。当用户单击下载按钮时,将调用此操作类。该代码没有给出任何异常(exception),但也不会提示用户下载任何内容。请帮我找出代码中的错误。以下是我的Action类的源代码..publicclassActDownloadDocZipextendsAction{staticLoggerlogger=Logger.getLogger(ActDownloadDocZip.class);publicActionForwardexecut
考虑将单个文件test_file.pdf放入zip存档test.zip中的代码示例,然后阅读此存档:importjava.io.*;importjava.util.zip.ZipEntry;importjava.util.zip.ZipInputStream;importjava.util.zip.ZipOutputStream;publicclassMain{publicstaticvoidmain(String[]args){Fileinfile=newFile("test_file.pdf");try(FileInputStreamfis=newFileInputStream(i
我被这个junit测试困住了:publicvoidtest()throwsException{ByteArrayOutputStreamout=newByteArrayOutputStream();ZipOutputStreamzipOut=newZipOutputStream(out);zipOut.putNextEntry(newZipEntry("file"));zipOut.write((newbyte[]{0x01,0x02,0x03}));zipOut.closeEntry();zipOut.close();ZipInputStreamzipIn=newZipInputSt
我需要从S3下载照片(不在同一目录中),将它们压缩并使用AWSS3JavaSDK再次上传到S3。此zip文件大小可以GB为单位。目前我使用的是AWSLambda,它的临时存储限制为500MB。所以我不想将ZIP文件保存在磁盘上,而是想将ZIP文件(使用从S3下载的照片动态创建)直接流式传输到S3。我需要使用AWSS3JavaSDK。 最佳答案 基本思想是使用流操作。这样您就不会等到ZIP在文件系统上生成,而是尽快开始上传,因为ZIP算法会生成任何数据。显然,一些数据会缓存在内存中,仍然不需要等待整个ZIP生成到磁盘上。我们还将在两个
我想执行一个程序,当它运行时读入它的输出并将输出输出到一个压缩文件中。该程序的输出可能非常大,所以我的想法是不要在内存中保留太多-只是在我得到它时将其发送到zip。 最佳答案 ZipOutputStreamtargetStream=newZipOutputStream(fileToSaveTo);ZipEntryentry=newZipEntry(nameOfFileInZipFile);targetStream.putNextEntry(entry);byte[]dataBlock=newbyte[1024];intcount=i
我使用此代码创建一个包含文件列表的.zip:ZipOutputStreamzos=newZipOutputStream(newFileOutputStream(zipFile));for(inti=0;i0;){zos.write(buffer,0,read);}fis.close();zos.closeEntry();}zos.close();我不知道zip算法和ZipOutputStream是如何工作的,如果它在我读取并发送到“zos”所有数据之前写了一些东西,结果文件的字节大小可能与我选择另一个不同缓冲区大小。换句话说,我不知道算法是不是这样的:读取数据-->处理数据-->创建.
我需要通过Java类ZipOutputStream压缩一个大文件(~450MB)。这个大尺寸导致我的JVM堆空间出现“OutOfMemory”错误的问题。发生这种情况是因为“zos.write(...)”方法在压缩之前将所有要压缩的文件内容存储在内部字节数组中。origin=newBufferedInputStream(fi,BUFFER);ZipEntryentry=newZipEntry(filePath);zos.putNextEntry(entry);intcount;while((count=origin.read(data,0,BUFFER))!=-1){zos.write
在不使用第3方库的情况下,使用JAXB将XML文件列表直接写入zip存档的正确方法是什么。将所有XML文件写入一个目录然后压缩会更好吗? 最佳答案 正如其他人所指出的,您可以使用ZipOutputStream类来创建ZIP文件。将多个文件放入单个ZIP文件的技巧是在将JAXBXML数据写入(编码)ZipOutputStream之前使用ZipEntry描述符。所以您的代码可能看起来与此类似:JAXBElementjaxbElement1=objectFactory.createRoot(rootType);JAXBElementjax
我正在尝试压缩一个InputStream并返回一个InputStream:publicInputStreamcompress(InputStreamin){//Read"in"andwritetoZipOutputStream//ConvertZipOutputStreamintoInputStreamandreturn}我正在压缩一个文件(因此我可以使用GZIP),但将来会做更多(因此我选择了ZIP)。在大多数地方:CompressanInputStreamwithgzipHowcanIconvertZipInputStreamtoInputStream?他们使用不存在的toByte