【发布时间】:2017-12-12 22:26:35
【问题描述】:
我有一个 groovy 脚本,它需要 2 个 zip 文件,解压缩它们,然后处理它们。
我遇到的问题是当我解压缩 zip 文件时,每个解压缩的文件都会生成一个子文件夹,然后是解压缩文件的内容而不是内容本身。
例子:
目前,当我解压缩时会发生这种情况
content-1232.zip -> /content-1232/content/<all content here>
我想要的是
content-1232.zip -> /content-1232/<all_content>
或
放入新目录
content-1232.zip -> /new_directory/<all_content>
我试过了,但没有用:
Path basePath = Paths.get(output.getAbsolutePath())
Path srcPath = Paths.get(pdfContent.getAbsolutePath())
Path targetPath = basePath
Files.move(srcPath, targetPath.resolve(basePath.relativize(srcPath)))
似乎是一件非常简单的事情,但我没有任何运气。我怎样才能在 groovy 中做到这一点?任何帮助将不胜感激
编辑:
static void main(String[] args) {
logger.info("Beginning unpacking of content...")
def output = new File("/Users/Haddad/Desktop/workspace/c")
def pdfContent = new File("/Users/Haddad/Desktop/workspace/c/pdf-content")
// Look for test1 and test2 production content zip file, ensure there's only 1 and unzip
List appZip = FileUtil.discoverFiles(output, true, "test1-production-content-.*\\.zip")
List compliZip = FileUtil.discoverFiles(output,true,"test2-production-content-.*\\.zip")
assert appZip.size() == 1, "Did not find expected number of test1 content zip, actual size is: " + appZip.size()
assert compliZip.size() == 1, "Did not find expected number of test2 content zip, actual size is " + appZip.size()
def outputAppZip = new File(output.getAbsolutePath()+"/"+appZip.get(0).getName()+"-intermediate");
def outputCompliZip = new File(output.getAbsolutePath()+"/"+compliZip.get(0).getName()+"-intermediate");
ZipUtil.unzipToDisk(appZip.get(0), outputAppZip )
ZipUtil.unzipToDisk(compliZip.get(0), outputCompliZip )
// move it to pdf content
List applicationContent = FileUtil.discoverDirectories(output, "one-production-content-.*-intermediate", true)
assert applicationContent.size() == 1, "Did not find expected number of test1 contents " + applicationContent.size()
def success = FileUtil.copy(applicationContent.get(0), pdfContent)
assert success, "Could not copy tt content"
// move pdf content
List complianceContent = FileUtil.discoverDirectories(output, "two-production-content-.*-intermediate", true)
assert complianceContent.size() == 1, "Did not find expected number of test2 contents " + complianceContent.size()
success = FileUtil.copy(complianceContent.get(0), pdfContent)
assert success, "Could not copy pdf content"
// rename to not be unsupported
List unsupportedDirs = FileUtil.discoverDirectories(pdfContent, "_unsupported_.*", true)
for (File file : unsupportedDirs) {
file.renameTo(new File(file.getParentFile(), file.getName().replace("_unsupported_", "")))
}
logger.info("Completed!")
}
【问题讨论】:
-
显示你的解压码。
-
与 Java 或 grails 无关。标签已移除
-
@AbhijitSarkar 刚刚添加了代码。我希望这不会给我的问题增加任何不必要的复杂性
-
grails标签完全具有误导性 - 再次被删除。在这个问题中没有一点 grails 特定的代码。 -
@mosawi 这不是它的工作原理。我们不是因为回答您向我们提出的随机问题而获得报酬的顾问。我们是喜欢解决问题的程序员。为了做到这一点,我们需要先了解上下文。如果您想处理模糊的信息,请询问您的上级。