现在新的要求是密码保护他们。下面是我使用的聚合策略。如何实现这一点?
<route autoStartup="false" routePolicyRef="routeTwoTimer" startupOrder="2" id="zippingFileRoute">
<from uri="{{to.file.processed1}}"/>
<choice id="csvZipFile">
<when>
<simple>$simple{header.CamelFileName} regex '^.*(csv|CSV)$'</simple>
<aggregate strategyRef="zipAggregationStrategy" completionFromBatchConsumer="true" eagerCheckCompletion="true">
<correlationExpression>
<constant>true</constant>
</correlationExpression>
<to uri="{{to.file.processed2}}"/>
</aggregate>
</when>
</choice>
</route>
正如注释中所指出的,Java API在加密ZIP文件方面有点有限。Apache CamelZipAggregationStrategy
使用的是ZipOutputStream
,所以也有这个限制。您可以使用任何其他库实现自定义聚合器
,它允许对Zip文件进行加密。例如Zip4j
添加Maven依赖项
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.2</version>
</dependency>
实现自定义聚合器
import net.lingala.zip4j.core.ZipFile;
//next few imports. I have added this only to take correct ZipFile class, not the JDK one
public class PasswordZipAggregationStrategy implements AggregationStrategy {
public static final String ZIP_PASSWORD_HEADER = "PasswordZipAggregationStrategy.ZipPassword";
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange){
try {
if (newExchange == null) {
return oldExchange;
}
return aggregateUnchecked(oldExchange,newExchange);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private Exchange aggregateUnchecked(Exchange oldExchange, Exchange newExchange) throws Exception{
ZipFile zipFile;
String password;
if (oldExchange == null) { // first
password = newExchange.getIn().getHeader(ZIP_PASSWORD_HEADER, String.class);
zipFile = new ZipFile(newExchange.getExchangeId()+".zip");
File toDelete = new File(zipFile.getFile().getPath());
newExchange.addOnCompletion(new Synchronization() {
@Override
public void onComplete(Exchange exchange) {
toDelete.delete();
}
@Override
public void onFailure(Exchange exchange) {
}
});
} else {
password = newExchange.getIn().getHeader(ZIP_PASSWORD_HEADER, String.class);
zipFile = new ZipFile(oldExchange.getIn().getBody(File.class));
}
if (password==null){
throw new IllegalStateException("Null password given");
}
ZipParameters zipParameters = new ZipParameters();
zipParameters.setPassword(password);
zipParameters.setEncryptFiles(true);
zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_FAST);
zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
zipFile.addFile(newExchange.getIn().getBody(File.class), zipParameters);
GenericFile genericFile = FileConsumer.asGenericFile(zipFile.getFile().getParent(), zipFile.getFile(), Charset.defaultCharset().toString(), false);
genericFile.bindToExchange(newExchange);
newExchange.getIn().setBody(zipFile.getFile());
newExchange.getIn().setHeader(ZIP_PASSWORD_HEADER, password);
return newExchange;
}
}
from("file://in")
.to("log:in")
.setHeader(PasswordZipAggregationStrategy.ZIP_PASSWORD_HEADER, constant("testPassword"))
.aggregate().constant(true).completionFromBatchConsumer()
.aggregationStrategy(new PasswordZipAggregationStrategy())
.to("log:out")
.to("file://out");
问题内容: 我有一个密码保护Excel文件的问题。 情况是,我有一个zip文件,其中有一个Excel文件。我需要编写一个Java程序,以密码保护Excel文件。因此,用户应该能够解压缩文件(压缩文件无需密码保护)。但是,Excel需要使用密码保护。当用户尝试解压缩文件时,他应该能够解压缩。当他尝试打开Excel文件(位于解压缩的文件夹内)时,它必须要求输入密码。问题类似于使用Java保护excel
除非设置了主密码,否则压缩配置文件里保存的密码没有安全地加密,并且可以被任何能访问 您电脑的人读取。您可以输入主密码来加密保存在注册表里的密码数据,并保护它免遭未经授权 的访问。此后,您需要在密码提示对话框里输入主密码,才能访问此压缩配置文件。 您可以使用与密码管理器里相同的作为主密码,或者选择不同的密码。您甚至可以为不同的 压缩配置文件指定不同的主密码,尽管这样可能不便于使用。 一旦输入,主密码
问题内容: 尝试使用Apache Camel解压缩文件时,我尝试了http://camel.apache.org/zip-file- dataformat.html中 给出的示例,但找不到 UnZippedMessageProcessor 类。这是代码: 是否有人尝试这样做或通过骆驼路线将文件解压缩? 先感谢您! 问题答案: 您也可以像这样定义路由,可以在camel-zipfile中找到 ZipS
本文向大家介绍C#文件流进行压缩和解压缩的方法,包括了C#文件流进行压缩和解压缩的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#文件流进行压缩和解压缩的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。
问题内容: 我是Go的新手,无法弄清楚如何使用该软件包对我有利。基本上,我只想写一些东西到文件中,将其gzip压缩,然后通过另一个脚本直接从压缩格式读取。如果有人可以给我一个有关如何执行此操作的示例,我将不胜感激。 问题答案: 所有压缩包都实现相同的接口。您将使用以下方式进行压缩: 并解压缩:
问题内容: 我想使用Java代码将文件压缩为zip,rar和7z格式。我也想在指定位置解压缩这些文件。谁能告诉我如何在Java中使用7-zip压缩和解压缩文件? 问题答案: 我用过:sevenzipjbinding.jar sevenzipjbinding-Allplatforms.jar 我现在可以使用这些jar解压缩文件。 尝试使用此链接进行解压缩:http : //sourceforge.n