Java 复制\u属性不适用于Zip文件系统
使用Java nioJava 复制\u属性不适用于Zip文件系统,java,nio,Java,Nio,使用Java nio文件时,Zip文件系统不会复制文件属性。使用StandardCopyOption.copy\u attributes复制方法。应该是吗 下面的示例代码演示了这个问题。它将两个文件复制到一个zip文件中:一个是普通文件,另一个是只读文件。如果您随后列出zip文件(例如使用7-zip),您将看到它们都是普通文件,而不是只读文件 public static void main(String[] args) throws Exception { Path tmpdir = F
文件时,Zip文件系统不会复制文件属性。使用StandardCopyOption.copy\u attributes
复制
方法。应该是吗
下面的示例代码演示了这个问题。它将两个文件复制到一个zip文件中:一个是普通文件,另一个是只读文件。如果您随后列出zip文件(例如使用7-zip),您将看到它们都是普通文件,而不是只读文件
public static void main(String[] args) throws Exception {
Path tmpdir = Files.createTempDirectory(null);
createFiles(tmpdir);
createZip(tmpdir);
}
private static void createFiles(Path tmpdir) throws IOException {
Files.write(tmpdir.resolve("a.txt"), Collections.singleton("Hello, world! (a)"));
Files.write(tmpdir.resolve("b.txt"), Collections.singleton("Hello, world! (b)"));
Files.setAttribute(tmpdir.resolve("b.txt"), "dos:readonly", true);
}
private static void createZip(Path dir) throws IOException
{
Path zip = dir.resolve("data.zip");
URI uri = URI.create("jar:" + zip.toUri());
try (FileSystem fs = FileSystems.newFileSystem(uri, Collections.singletonMap("create", "true"))) {
for (Path path : Files.newDirectoryStream(dir))
if (!path.equals(zip)) {
String name = path.getFileName().toString();
Files.copy(path, fs.getPath(name), StandardCopyOption.COPY_ATTRIBUTES);
}
}
}