У меня есть приложение, которое выводит некоторые файлы.
В зависимости от конфигурации мне нужно поместить их либо в обычную папку, либо в zip-файл.
Я пытаюсь использовать FileSystem
, чтобы отделить код, фактически записывающий от фактического типа назначения.
Моя проблема в том, что для Paths
, созданного Zip- FileSystems
, метод .tpFile()
не поддерживается. Поэтому я не могу создать FileWriter
, который я могу передать, например, JAXB.
public class FileSystemWriteTest {
public static void main(String[] args) throws IOException {
FileSystem localFileSystem = FileSystems.getDefault();
File relativeZipPath = Paths.get("target", "testpath").toFile();
relativeZipPath.mkdirs();
URI relativeZipFilePath = Paths.get(relativeZipPath.toString(), "test.zip").toUri();
URI zipUri = URI.create("jar:"
+ relativeZipFilePath);
System.out.println(zipUri);
Map<String, String> env = new HashMap<>();
env.put("create", "true");
try (FileSystem zipFile = FileSystems.newFileSystem(zipUri, env)) {
for (FileSystem fs : Arrays.asList(localFileSystem, zipFile)) {
Path file = fs.getPath("test.txt");
System.out.println(file.toAbsolutePath());
/* line 31 */ try (FileWriter fileWriter = new FileWriter(file.toFile())) {
fileWriter.write("irgend ein Text zum test\nob das so auch geht");
fileWriter.flush();
}
}
}
}
}
бросает
jar:file:///D:/data/scm-workspace/anderes/Test/target/testpath/test.zip
D:\data\scm-workspace\anderes\Test\test.txt
/test.txt
Exception in thread "main" java.lang.UnsupportedOperationException
at com.sun.nio.zipfs.ZipPath.toFile(ZipPath.java:597)
at com.oc.test.filesystem.FileSystemWriteTest.main(FileSystemWriteTest.java:31)
То, что я пытаюсь сделать, - это записать вывод JaxB непосредственно на диск во время его записи, не сохраняя его в памяти до завершения JaxB. (Мои XML-файлы довольно большие, поэтому я могу столкнуться с OOME)
Мой вопрос:
Как я могу открыть подходящий Writer
или OutputStream
из FileSystem
с архивом ZIP-файла?
С другой стороны
Какие еще есть у меня возможности скрыть реальную цель записи (папка с файлом ZIP) от JaxB?