如何解决当我在Linux内使用python在Windows系统中使用Java 8创建zip的情况下提取zip文件时与目录相关的问题
**我有一个包含一些文件和子目录的文件夹,其中还有一些文件。 但是,当我使用以下python代码将zip文件提取到Linux系统内部时。而不是创建子目录,它创建的文件名包含带有分隔符的子目录名,该文件是我在窗口系统中使用Java语言通过以下代码创建的zip文件。
示例:ABC.zip文件,其中包含abc.txt,子文件夹名称ABCD,此ABCD文件夹包含一个文件名test.txt 然后在python中,当我提取文件时,它将创建两个文件,其文件名为abc.txt,名称为ABCD \ text.txt,而不是ABCD文件夹,然后在ABCD text.txt文件中创建****
Python附带代码:解压缩zip文件
import zipfile
with zipfile.ZipFile(path_to_zip_file,'r') as zip_ref:
zip_ref.extractall(directory_to_extract_to)
Java附带代码:创建zip文件
String srcDir = "E:\\tomcat\\ai_data\\3";
File file = new File(srcDir);
File desFile = new File(srcDir.concat(".zip"));
final Path sourceDir = Paths.get(srcDir);
String zipFileName = srcDir.concat(".zip");
try {
final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName));
Files.walkFileTree(sourceDir,new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,BasicFileAttributes attributes) {
try {
Path targetFile = sourceDir.relativize(file);
outputStream.putNextEntry(new ZipEntry(targetFile.toString()));
byte[] bytes = Files.readAllBytes(file);
outputStream.write(bytes,bytes.length);
outputStream.flush();
outputStream.closeEntry();
} catch (IOException e) {
LOGGER.error("Create Zip file " + file.getFileName(),e.getMessage());
}
return FileVisitResult.CONTINUE;
}
});
outputStream.close();
} catch (IOException e) {}
解决方法
问题似乎是Java代码正在使用Windows风格的分隔符(\)创建zip文件条目,然后python代码看到该文件包含(\)并认为是该名称的一部分,因为它期望(/)作为路径分隔符。如果Java代码总是要创建要在Linux系统上提取的zip文件,请尝试将zip条目的文件路径转换为使用Linux分隔符,例如:
Path targetFile = sourceDir.relativize(file);
//Convert seperators to Linux Style
String linuxStylePath = FilenameUtils.seperatorsToUnix(targetFile.toString());
outputStream.putNextEntry(new ZipEntry(linuxStylePath));
参考Apache Commons IO Library进行路径转换。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。