2015-01-24 4 views
1

попытка переименования внутреннего файла в zip-файл без необходимости его извлечения и последующего повторного zip-программирования.переименование имени файла внутри zip-файла

пример. test.zip содержит test.txt, я хочу изменить его так, чтобы test.zip будет содержать newtest.txt (test.txt переименован в newtest.txt, содержимое остается тем же)

натолкнулся на эту ссылку, которая работает, но, к сожалению, он ожидает, что test.txt будет существовать в системе. В этом примере файл srcfile должен существовать на сервере.

Blockquote Rename file in zip with zip4j

Затем icame через zipnote на Linux, что делает трюк, но, к сожалению, версия у меня не работает для файлов> 4 Гб.

Любые предложения о том, как это сделать? предпочтительнее в java.

ответ

1

Это должно быть возможно с помощью Java 7 Zip поставщика FileSystem, что-то вроде:

// syntax defined in java.net.JarURLConnection 
URI uri = URI.create("jar:file:/directoryPath/file.zip"); 

try (FileSystem zipfs = FileSystems.newFileSystem(uri, Collections.<String, Object>emptyMap())) { 
    Path sourceURI  = zipfs.getPath("/pathToDirectoryInsideZip/file.txt"); 
    Path destinationURI = zipfs.getPath("/pathToDirectoryInsideZip/renamed.txt");   

    Files.move(sourceURI, destinationURI); 
} 
+0

это работало, но только после того, как изменения, это утверждение не работает FileSystem zipfs = FileSystems.newFileSystem (Uri, Collections.emptyMap ())) - несоответствие в типе. Я использовал нижеследующее из java-документа для этого класса. – md1980

+0

Карта env = new HashMap <>(); \t \t env.put ("capacity", "16G"); \t \t env.put ("blockSize", "4k"); – md1980

+0

FileSystem zipfs = FileSystems.newFileSystem (uri, env) Хотя в данный момент я не знаю, что такое hte емкость и размер блока. Если да, пожалуйста, поделитесь. – md1980

Смежные вопросы