- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 XMLOutputter、FileWriter 和 BufferedWriter 创建 xml 文件的方法。它工作正常,但 xml 文件可能相当大(超过 10 兆),而且我使用了很多文件。
我正在尝试找到一种方法将文件直接写入zip文件,保持文件架构。我使用的方法会将不同的 xml 文件依次添加到主文件夹中。
我想更改我的方法,这样它就不会删除已存档的文件,只需将它们添加到其中即可。
我花了很多时间研究实现此目的的方法,我知道我需要从现有存档中获取文件,向其中添加新文件,然后再次压缩它。我想使用 zipInputStream 和 zipOutputStream 来执行此操作。
此问题已接受的答案 Java appending files into a zip是我想做的最好的例子,但是第一次使用该方法时,zip 文件不存在,并且我不会一次向存档中添加多个文件。我想我可以自己用 if 语句来解决这个问题,该语句将检查 zip 文件是否存在,并在方法参数中使用 file 而不是 file[] 。
我面临的主要问题是找到一种方法来创建 xml 文件而不将其写入磁盘并将其压缩到 zip 文件。
我的猜测是创建一个临时文件并在压缩完成后将其删除。
知道如何实现这一目标吗?
这是我的代码示例:
XMLOutputter objOut = new XMLOutputter();
objOut.setFormat(Format.getPrettyFormat());
File objBaseDirectory = new File(m_strFolder); // folder where the xml file will be written but not main xml folder
if(!objBaseDirectory.exists())
{objBaseDirectory.mkdirs();}
FileWriter objFileWriter = new FileWriter(m_strFile); // xml file name
BufferedWriter objBuffer = new BufferedWriter(objFileWriter);
objOut.output(m_objectToWrite.toXml(0), objBuffer); // source file to convert to xml
这工作正常,并将 xml 文件写入正确的文件夹。
谁能帮我解决这个问题吗?
最佳答案
这个概念并没有太大不同。XMLOutputter 将 xml 数据写入目标 Writer 或 OutputStream。在您的代码中,它被写入最终在磁盘上的文件中。您可以提供另一个最终在 zip 中的输出流。
如果您查看有关将文件附加到 zip 的示例中的代码,您会看到以下内容:
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(source));
for(int i = 0; i < files.length; i++){
InputStream in = new FileInputStream(files[i]);
out.putNextEntry(new ZipEntry(path + files[i].getName()));
for(int read = in.read(buffer); read > -1; read = in.read(buffer)){
out.write(buffer, 0, read);
}
out.closeEntry();
in.close();
}
...
out.close();
发生什么事了?打开一个名为“out”的 zip 输出流。然后对文件执行循环。对于每个文件,都会获得一个输入流来读取文件字节,名为“in”。然后将一个条目添加到 zip 输出流中。添加它可以准备输出流以接收该条目的数据。之后,输入流被写入输出流,条目被关闭(为循环中的下一个文件准备下一个条目),最后关闭 zip 输出流。
好吧,您所要做的就是循环遍历文档(当前位于“m_objectToWrite”中)而不是磁盘文件。然后,您不需要从输入流复制到输出流,而是要求 xml 输出器将文档写入输出流。几乎与“在逻辑世界中,字节从输入到输出”的概念相同。但在这里,不是手动执行此复制,而是一些特殊对象为您执行此操作。 xml 输出器。
我将让您让一切正常工作,例如良好的路径以及 zip 中文件的存储位置。但假设 m_objectToWrite 是一个“文档”对象,工作代码的骨架可能是:(使用上面的代码和本文中的代码:
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(source));
for( Document m_objectToWrite : MY_DOCUMENTS_LIST ){
out.putNextEntry(new ZipEntry(path + GIVE_NAME_BASED_ON_CURRENT_DOCUMENT));
objOut.output(m_objectToWrite.toXml(0), out);
out.closeEntry();
}
...
out.close();
关于java - 将文件转换为 xml,然后将其添加到 zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16905684/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!