用java压缩文件时,在7Zip中创建空文件夹

用java压缩文件时,在7Zip中创建空文件夹,java,7zip,Java,7zip,我正在使用Java压缩API(Java.util.ZIP包)来压缩文件。它工作得很好。然而,我有下面的小问题 假设我的输入文件是C:\temp\text.txt,而我的输出(压缩)文件是C:\temp\text.zip 当我使用WinZip查看压缩文件(text.zip)时,它与内部文件夹结构一起正确显示。它显示为temp\text.txt。但是,如果使用7Zip打开同一个文件(使用右键单击->7Zip->打开存档选项),则在C:\temp\text.zip\之后会显示一个空文件夹。要查看tex

我正在使用Java压缩API(Java.util.ZIP包)来压缩文件。它工作得很好。然而,我有下面的小问题

假设我的输入文件是
C:\temp\text.txt
,而我的输出(压缩)文件是
C:\temp\text.zip

当我使用WinZip查看压缩文件(text.zip)时,它与内部文件夹结构一起正确显示。它显示为
temp\text.txt
。但是,如果使用7Zip打开同一个文件(使用右键单击->7Zip->打开存档选项),则在
C:\temp\text.zip\
之后会显示一个空文件夹。要查看
text.txt
,我需要在7Zip地址栏中输入
C:\temp\text.zip\\\temp\
。注意这里的双反斜杠
\\\

下面是我的代码:

String input="C:\temp\text.txt";
String output="C:\temp\text.zip";
FileOutputStream dest = new FileOutputStream(output);
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
out.setMethod(ZipOutputStream.DEFLATED); //Entries can be added to a ZIP file in a compressed (DEFLATED) form 
out.setLevel(this.getZIPLevel(Deflater.DEFAULT_COMPRESSION));

File file = new File(input);
final int BUFFER = 2048;
byte data[] = new byte[BUFFER];
BufferedInputStream origin = null;
FileInputStream fi;

fi = new FileInputStream(file);
origin = new BufferedInputStream(fi, BUFFER);

int index = file.getAbsolutePath().indexOf(":") + 1;
String relativePath = file.getPath().substring(index);

ZipEntry entry = new ZipEntry(relativePath);
out.putNextEntry(entry);
int count;
while((count = origin.read(data, 0, BUFFER)) != -1) {
      out.write(data, 0, count);
}
origin.close();
out.close();

有人能告诉我为什么我看到额外的空文件夹使用7Zip?我正在使用JDK7。

对于初学者,请尝试修复此问题:

String input = "C:\\temp\\text.txt";
String output = "C:\\temp\\text.zip";
请注意,您需要在字符串中转义
\
字符。假定<代码> \t \ <代码>是一个有效的转义序列,它可能以前已经工作过,但是在名称中间有几个选项卡字符。为了避免转义路径分隔符,可以这样编写:

String input = "C:/temp/text.txt";
String output = "C:/temp/text.zip";

为了使它更具可移植性,您可以将
“\\\”
“/”
替换为
文件.separator
,这是一个常数,它为您的环境保留正确的系统相关名称分隔符(不过
“C:
部分将不可移植)。

您是否应该改用“C:\\temp\\text.txt”呢?洛佩兹:是的,“\t”是转义序列。我已经试着用“\”来逃避这一点,但它不起作用。我也试过使用正斜杠“/”,但也不起作用。问题是,该文件是用WinZip(使用C:\temp\text.txt,甚至使用“\\”)正确压缩和查看的,而不是用7Zip。因此,我怀疑7Zip是否有不同的机制/算法用于压缩文件或在7Zip UI中显示文件。有什么想法吗?