Java 在Windows中创建Zip文件,在Linux中解压缩Zip文件
我在Windows下创建了一个zip文件(连同目录),如下所示(代码取自): “MyDirectory\MyFile.txt”而不是MyFile.txt放在文件夹MyDirectory下。 我试图通过将zip文件创建代码更改为Java 在Windows中创建Zip文件,在Linux中解压缩Zip文件,java,Java,我在Windows下创建了一个zip文件(连同目录),如下所示(代码取自): “MyDirectory\MyFile.txt”而不是MyFile.txt放在文件夹MyDirectory下。 我试图通过将zip文件创建代码更改为 String[] filenames = new String[]{"MyDirectory" + "/" + "MyFile.txt"}; 但是,通过硬编码分隔符,这是一个合格的解决方案吗?它能在Mac操作系统下工作吗?(我没有Mac电脑可供试用)是的,您的解
String[] filenames = new String[]{"MyDirectory" + "/" + "MyFile.txt"};
但是,通过硬编码分隔符,这是一个合格的解决方案吗?它能在Mac操作系统下工作吗?(我没有Mac电脑可供试用)是的,您的解决方案(尽管显然不雅观)是正确的。
“/”应该在zipentry内部使用,而不是本地File.separator
public static boolean extractZipFile(File zipFilePath, boolean overwrite) {
InputStream inputStream = null;
ZipInputStream zipInputStream = null;
boolean status = true;
try {
inputStream = new FileInputStream(zipFilePath);
zipInputStream = new ZipInputStream(inputStream);
final byte[] data = new byte[1024];
while (true) {
ZipEntry zipEntry = null;
FileOutputStream outputStream = null;
try {
zipEntry = zipInputStream.getNextEntry();
if (zipEntry == null) break;
final String destination = Utils.getUserDataDirectory() + zipEntry.getName();
if (overwrite == false) {
if (Utils.isFileOrDirectoryExist(destination)) continue;
}
if (zipEntry.isDirectory())
{
Utils.createCompleteDirectoryHierarchyIfDoesNotExist(destination);
}
else
{
final File file = new File(destination);
// Ensure directory is there before we write the file.
Utils.createCompleteDirectoryHierarchyIfDoesNotExist(file.getParentFile());
int size = zipInputStream.read(data);
if (size > 0) {
outputStream = new FileOutputStream(destination);
do {
outputStream.write(data, 0, size);
size = zipInputStream.read(data);
} while(size >= 0);
}
}
}
catch (IOException exp) {
log.error(null, exp);
status = false;
break;
}
finally {
if (outputStream != null) {
try {
outputStream.close();
}
catch (IOException exp) {
log.error(null, exp);
break;
}
}
if (zipInputStream != null) {
try {
zipInputStream.closeEntry();
}
catch (IOException exp) {
log.error(null, exp);
break;
}
}
}
} // while(true)
}
catch (IOException exp) {
log.error(null, exp);
status = false;
}
finally {
if (zipInputStream != null) {
try {
zipInputStream.close();
} catch (IOException ex) {
log.error(null, ex);
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException ex) {
log.error(null, ex);
}
}
}
return status;
}
String[] filenames = new String[]{"MyDirectory" + "/" + "MyFile.txt"};