Java ZipFile构造函数-使用其模式和字符集参数的正确方法

Java ZipFile构造函数-使用其模式和字符集参数的正确方法,java,zip,zipfile,Java,Zip,Zipfile,是ZipFile构造函数吗 ZipFile(File file, int mode, Charset charset) throws IOException mode和charset参数是如何准确使用的?它们是干什么用的 1模式=ZipFile.OPEN\u删除 文件何时被删除 此外,这并不是在zip存档中删除单独的文件——为什么我不使用file.delete或file.deleteOnExit删除我的zip文件呢 该文件将在被删除之间的某个时间被删除 打开和关闭的那一刻,但其内容仍将保留

是ZipFile构造函数吗

 ZipFile(File file, int mode, Charset charset) throws IOException
mode和charset参数是如何准确使用的?它们是干什么用的

1模式=ZipFile.OPEN\u删除

文件何时被删除

此外,这并不是在zip存档中删除单独的文件——为什么我不使用file.delete或file.deleteOnExit删除我的zip文件呢

该文件将在被删除之间的某个时间被删除 打开和关闭的那一刻,但其内容仍将保留 可通过ZipFile对象访问,直到关闭方法 调用或虚拟机退出

因此,我删除了如下文件:

try {

    ZipFile zf = new ZipFile(new File("myZipFile.zip"), ZipFile.OPEN_DELETE);           

    // file name and comment are not read in this binary stream, do they?
    zf.getInputStream(zf.getEntry("dirInZip/fileInsideZip.txt"));
    // some operations

    zf.close(); // closes InputStream and deletes myZipFile.zip ?

} catch (IOException e) {
    // handling
}
2字符集参数:

用于解码ZIP条目名称和注释的字符集 如果ZIP条目的常规 设置目的位标志

我一点也不明白

在运行某些zip实用程序之前,要压缩的文件名可能是非UTF编码的,理论上,在非常旧的Windows上,可能是Windows-1252代码页,等等,除此之外,当我运行WinZip或其他东西时,我可以复制粘贴非UTF文本作为注释-但是否有一些标准文件名和注释应如何存储在ZIP中?我的意思是WinZip或类似的东西会在压缩之前强制/更改编码为UTF-8

2.1在这种情况下,我可能希望Zip中包含非UTF文件名和注释


2.2使用myZipFile.getEntrydirInZip/fileInsideZip.txt,我使用的是本质上是UTF16的java字符串,那么我为什么要关心编码呢?我只是将任何内容写入java字符串,对吗?

我认为1已经足够清楚了:文件在某个点被删除,但由于加载到内存中,所以仍然可以访问。有什么不清楚的

Re 2,当从外部源读取文本时,您需要知道其编码并使用该编码对文本进行解码。实际上,您正在读取的是一个二进制流,因此需要知道用于编码原始字符的方法。下一步是如何存储该文本,例如Java UTF-16