代码之家  ›  专栏  ›  技术社区  ›  Timothy Truckle Vincent Boutot

如何使用文件系统.getPath()作为(文件)写入程序的目标?

  •  0
  • Timothy Truckle Vincent Boutot  · 技术社区  · 6 年前

    我有一个应用程序,输出一些文件。

    根据配置的不同,我需要将它们放在普通文件夹或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 福马 文件系统

    或者 :

    1 回复  |  直到 6 年前
        1
  •  1
  •   Holger    6 年前

    与大多数其他文件系统操作一样,打开 OutputStream Writer ,或 Channel 可以通过 Files 实用程序类。

    但是还要注意更高层次的方法,比如

    ZipOutputStream 顶上 FileOutputStream 可能比使用 ZipFileSystem .

    推荐文章