Java 上传前,在.zip中修改.txt的最佳方式是什么

Java 上传前,在.zip中修改.txt的最佳方式是什么,java,spring-mvc,Java,Spring Mvc,我有一个web应用程序,用户可以登录他的帐户并下载程序。程序是zip格式的,里面有配置文件(.txt)。 我想做的是: 获取此zip/配置文件(.txt) 更改配置文件内的参数 向用户发送带有新配置文件的整个zip文件 我知道如何将zip发送给用户,但当同时有多个用户时,修改每个用户的zip内部文件并发送它的最佳方法是什么 编辑 如何将其按用户进行拆分,例如,我有两个用户同时单击下载,因此我的服务器应该为每个用户准备两个不同的拉链,但我如何才能做到这一点。正如EJP bellow所提到的,我不能

我有一个web应用程序,用户可以登录他的帐户并下载程序。程序是zip格式的,里面有配置文件(.txt)。 我想做的是:

  • 获取此zip/配置文件(.txt)
  • 更改配置文件内的参数
  • 向用户发送带有新配置文件的整个zip文件
  • 我知道如何将zip发送给用户,但当同时有多个用户时,修改每个用户的zip内部文件并发送它的最佳方法是什么

    编辑
    如何将其按用户进行拆分,例如,我有两个用户同时单击下载,因此我的服务器应该为每个用户准备两个不同的拉链,但我如何才能做到这一点。正如EJP bellow所提到的,我不能修改zip,首先我应该解压它,但是我应该在哪里保存临时解压文件以保证每个线程的安全。有什么最好的办法吗?

    你不能。您必须解压缩、更改、重新压缩、发送。ZIP文件不是文件系统


    Java 8中有某种类型的ZIP文件系统,但在后台它必须执行上述操作。

    您可以使用
    file.createTempFile
    创建临时文件。然后将配置文件的内容复制到临时文件中。现在,您已经拥有了文件的线程安全副本,您可以毫无顾虑地对其进行修改。

    实际上,您可以使用NIO文件系统API(它可能仍会在后台进行重新压缩,但您不必担心):


    我会说:将文本文件复制到临时文件->修改副本->压缩副本->发送给用户。它将在系统临时文件中创建临时文件folder@user902383createTempFile我想这正是我在这篇文章中想要的。谢谢,你能回答吗?我如何将其按用户进行拆分,例如,我有两个用户同时单击“下载”,因此我的服务器应该为每个用户准备两个不同的ZIP,但我如何才能做到这一点,我应该将临时未压缩的文件保存在哪里。有什么最好的方法吗?您可以存储一个静态的
    AtomicInteger
    或类似的文件,每次下载时都会递增,并跟踪文件名/目录后缀<代码>/tmp/MyWebService/tempFiles1/,
    /tmp/MyWebService/tempFiles2/
    等。
    Path zipPath = Paths.get("/path/to/file.zip");
    FileSystem zipFS = FileSystems.newFileSystem(path, null);
    Path pathInZip = zipFS.getPath("/test.txt");
    
    String s = Resources.toString(pathInZip.toUri().toURL(), Charsets.UTF_8);
    System.out.println(s);
    
    Files.write(pathInZip, "Hello World!".getBytes(Charsets.UTF_8), StandardOpenOption.TRUNCATE_EXISTING);
    zipFS.close();