public class Main {
public static void main(String[] args) {
String[] data = {
"Line 1",
"Line 2 2",
"Line 3 3 3",
"Line 4 4 4 4",
"Line 5 5 5 5 5"
};
try(FileSystem zipFs = openZip(Paths.get("myData.zip"))) {
copyToZip(zipFs);
writeToFileInZip1(zipFs, data);
writeToFileInZip2(zipFs, data);
} catch(Exception e) {
System.out.println(e.getClass().getSimpleName() + " - " + e.getMessage());
}
}
// create a zip file system
private static FileSystem openZip(Path zipPath) throws IOException, URISyntaxException {
Map<String, String> providerProps = new HashMap<>();
providerProps.put("create", "true");
URI zipUri = new URI("jar:file", zipPath.toUri().getPath(), null);
FileSystem zipFs = FileSystems.newFileSystem(zipUri, providerProps);
return zipFs;
}
// copy a file to the zip folder
private static void copyToZip(FileSystem zipFs) throws IOException {
Path sourceFile = Paths.get("file1.txt");
//Path sourceFile = FileSystems.getDefault().getPath("file1.txt");
Path destFile = zipFs.getPath("/file1Copied.txt");
Files.copy(sourceFile, destFile, StandardCopyOption.REPLACE_EXISTING);
}
// write directly to a file in the zip folder using stream
private static void writeToFileInZip1(FileSystem zipFs, String[] data) throws IOException {
try(BufferedWriter writer = Files.newBufferedWriter(zipFs.getPath("/newFile1.txt"), StandardOpenOption.CREATE)) {
for(String d:data) {
writer.write(d);
writer.newLine();
}
}
}
// write directly to a file in the zip folder using Files API
private static void writeToFileInZip2(FileSystem zipFs, String[] data) throws IOException {
Files.write(zipFs.getPath("/newFile2.txt"), Arrays.asList(data),
Charset.defaultCharset(), StandardOpenOption.CREATE);
}
}
参考资料关于NIO File API:https://www.oreilly.com/library/view/learning-java-4th/9781449372477/ch12s03.html