我使用AWS Amplify作为后端,并使用Amplify S3存储图像和视频。但我想以尽可能最好的压缩方式上传文件(例如1.5mb)-
try {
InputStream exampleInputStream = getContentResolver().openInputStream(uri);
Amplify.Storage.uploadInputStream(
editText.getText().toString(),
exampleInputStream, StorageUploadInputStreamOptions.defaultInstance(),
this::showProgress,
this::uploded,
storageFailure -> Log.e("MyAmplifyApp", "Upload failed", storageFailure)
);
} catch (FileNotFoundException error) {
Log.e("MyAmplifyApp", "Could not find file to open for input stream.", error);
}
我想推荐这个zip4j库。在我的例子中,我使用了版本2.9.1
,所以你可以选择你想要的任何版本!。但是,在库中调用函数不同。因为,这取决于你使用的版本...这就是为什么我在上面提到了我的版本。
zip4j库
压紧
private boolean compressAsZip(String src, String dst) {
File dstFile = new File(dst);
//make dirs if necessary
dstFile.getParentFile().mkdirs();
try {
ZipParameters parameters = new ZipParameters();
// Setup encrypt true to protect with password
parameters.setEncryptFiles(true);
// Set encryption method
parameters.setEncryptionMethod(EncryptionMethod.AES);
// Setup password key length / strength
parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
// To include the folder to .zip
parameters.setIncludeRootFolder(false);
parameters.setCompressionMethod(CompressionMethod.DEFLATE);
parameters.setCompressionLevel(CompressionLevel.ULTRA);
ZipFile zipFile = new ZipFile(dstFile.getAbsoluteFile(), "ZIP_PASSWORD".toCharArray());
zipFile.setRunInThread(true);
zipFile.addFolder(new File(src), parameters);
ProgressMonitor progressMonitor = zipFile.getProgressMonitor();
while (!progressMonitor.getState().equals(ProgressMonitor.State.READY)) {
//System.out.println("Percentage done: " + progressMonitor.getPercentDone());
//System.out.println("Current getFileName: " + progressMonitor.getFileName());
//System.out.println("Current task: " + progressMonitor.getCurrentTask());
//System.out.println("Current total work: " + progressMonitor.getTotalWork());
//System.out.println("Current total work completed: " + progressMonitor.getWorkCompleted());
}
if (progressMonitor.getResult().equals(ProgressMonitor.Result.SUCCESS)) {
//System.out.println("Successfully added folder to zip");
return true;
} else if (progressMonitor.getResult().equals(ProgressMonitor.Result.ERROR)) {
//System.out.println("Error occurred. Error message: " + progressMonitor.getException().getMessage());
return false;
} else {
//System.out.println("Task cancelled");
return false;
}
} catch (Exception exception) {
//exception.printStackTrace();
return false;
}
}
解压
private boolean unZipFolder(String src, String destination) {
try {
ZipFile zipFile = new ZipFile(src);
if (zipFile.isEncrypted()) {
zipFile.setPassword("ZIP_PASSWORD".toCharArray());
}
zipFile.extractAll(destination);
ProgressMonitor progressMonitor = zipFile.getProgressMonitor();
if (progressMonitor.getResult().equals(ProgressMonitor.Result.SUCCESS)) {
System.out.println("Successfully extracted data from the zip");
return true;
} else if (progressMonitor.getResult().equals(ProgressMonitor.Result.ERROR)) {
System.out.println("Error occurred. Error message: " + progressMonitor.getException().getMessage());
return false;
} else {
System.out.println("Task cancelled");
return false;
}
} catch (ZipException e) {
e.printStackTrace();
return false;
}
}
问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示:
问题内容: 我需要一个小的代码片段,该片段从给定的.zip文件中解压缩一些文件,并根据压缩文件中的格式提供单独的文件。请发表您的知识并帮助我。 问题答案: peno的版本进行了优化。性能的提高是可以察觉的。
我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?
问题内容: 我的应用程序正在通过SMTP服务器接收电子邮件。电子邮件中有一个或多个附件,电子邮件附件以byte []的形式返回(使用sun javamail api)。 我正在尝试快速压缩附件文件,而不先将其写入磁盘。 有什么/可能的方法来实现这一结果? 问题答案: 您可以使用Java的java.util.zip.ZipOutputStream在内存中创建一个zip文件。例如:
我正在为嵌套在其他一些面板中的面板使用垂直BoxLayout。其他面板的大小会导致目标面板中的对象以不美观的方式展开。如何让面板在没有太多填充的情况下从上到下呈现对象? 下面是类似的代码,尽管它产生了填充整个面板的微调器,而不是相距甚远的普通微调器。
压缩文件-->10个文件夹--每个文件夹>20个csv文件 null 尝试了以下代码,但不起作用