2014-08-06 3 views
0

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

я могу создать почтовый файл в C: \ с кодом, как это:

// Properties for archive file we're creating 
Map<String, String> archiveProperties = new HashMap<>(); 
archiveProperties.put("create", "true"); 
archiveProperties.put("encoding", "UTF-8");   
URI archiveLocation = URI.create("jar:file:/" + "my.zip"); 

// Create archive 
FileSystem archive = FileSystems.newFileSystem(archiveLocation, archiveProperties); 

Но я действительно хочу, почтовый файл будет создан один каталог вверх, если вы будете, от настоящего рабочего каталога. Я пробовал много вещей, в том числе:

// Properties for archive file we're creating 
Map<String, String> archiveProperties = new HashMap<>(); 
archiveProperties.put("create", "true"); 
archiveProperties.put("encoding", "UTF-8");   
URI archiveLocation = URI.create("jar:file:../" + "my.zip"); 

// Create archive 
FileSystem archive = FileSystems.newFileSystem(archiveLocation, archiveProperties); 

Но я либо получаю исключение, URI не является иерархической, в данном случае, или он продолжает быть создан в C: \

ответ

1

Я наконец придумал решение, хотя и не очень красиво:

// Properties for archive file we're creating 
Map<String, String> archiveProperties = new HashMap<>(); 
archiveProperties.put("create", "true"); 
archiveProperties.put("encoding", "UTF-8");   

String filePathName = System.getProperty("user.dir") + FILE_SEPARATOR + ".." + FILE_SEPARATOR + "myfile.zip"; 
filePathName = filePathName.replace('\\','/'); 
filePathName = filePathName.replaceAll(" ", "%20"); 
URI archiveLocation = URI.create("jar:file:///" + filePathName); 

// Create archive 
FileSystem archive = FileSystems.newFileSystem(archiveLocation, archiveProperties); 

Примечание F ILE_SEPARATOR поступает из System.getProperty (file.separator)

0

Быстрое исправление будет использовать этот

URI archiveLocation = URI.create("jar:file:///"+new File(".").getAbsolutePath()+"/../my.zip"); 
+0

Благодарим за предложение. Я попробовал и получил исключение. :-( Исключение из потока «main» java.lang.IllegalArgumentException: Недопустимый символ в непрозрачной части по индексу 14: jar: file: /// C: \ Users \ IBM_ADMIN \ Documents \ Eclipse workspace RTC Dev Stream2 \ bin \ ./../my.zip \t на java.net.URI.create (URI.java:870) – Dale

+0

Вам просто нужно было изменить разделитель файлов в соответствии с вашей средой Windows, как это было в вашем ответе. –

+0

Спасибо, Нага Я не мог поверить, насколько трудной была эта, казалось бы, легкая задача - работать. – Dale

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