gpt4 book ai didi

java - 为什么我的测试文件系统只能在内存中工作?

转载 作者:行者123 更新时间:2023-11-29 09:04:50 25 4
gpt4 key购买 nike

我正在研究程序文件系统的概念。我正在用 Java 编写(使用 JDK 7 u17)。

开始时,我引用了一些教程,这些教程展示了我如何使用 FileSystemProvider 类创建基于 zip 的文件系统。

当我执行代码时,我让它执行与示例类似的任务,即从我的桌面复制一个文本文件并将其放入 zip 文件中。问题是一旦它复制了文件,它并没有将它写入 zip 文件,它似乎将文件留在内存中,当程序终止时它被销毁。

问题是我不明白为什么,据我所知,一切看起来都井井有条,但显然不是!

哦,是的,同样的事情也适用于目录。如果我告诉文件系统创建一个新目录,它只会在内存中创建它,而 zip 文件中没有任何内容。

无论如何这是我的工作代码;

import java.io.IOException;
import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

public class Start {

public static void main(String[] args) {

Map <String, String> env = new HashMap<>();
env.put("create", "true");
env.put("encoding", "UTF-8");

FileSystem fs = null;

try {
fs = FileSystems.newFileSystem(URI.create("jar:file:/Users/Ian/Desktop/test.zip"), env);
} catch (IOException e) {
e.printStackTrace();
}

Path externalTxtFile = Paths.get("/Users/Ian/Desktop/example.txt");
Path pathInZipFile = fs.getPath("/example.txt");

try {
Files.createDirectory(fs.getPath("/SomeDirectory"));
} catch (IOException e) {
e.printStackTrace();
}

if (Files.exists(fs.getPath("/SomeDirectory"))) {
System.out.println("Yes the directory exists in memory.");
} else {
System.out.println("What directory?");
}

// Why is the file only being copied into memory and not written out the jar/zip archive?
try {
Files.copy(externalTxtFile, pathInZipFile);
} catch (IOException e) {
e.printStackTrace();
}

// The file clearly exists just before the program ends, what is going on?
if (Files.exists(fs.getPath("/example.txt"))) {
System.out.println("Yes the file has been copied into memory.");
} else {
System.out.println("What file?");
}

}

}

最佳答案

我想补充一点。也许您找到的示例不完整(我无法检查,因为您没有引用它)但在所有示例中,我发现 FileSystem 实例已正确关闭。

FileSystem 抽象类实现了 Closeable,因此调用了 close() 方法(自动)留下了以下代码中的 try:

try (final FileSystem fs = FileSystems.newFileSystem(theUri, env)) {
/* ... do everything you want here ; do not need to call fs.close() ... */
}

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

关于java - 为什么我的测试文件系统只能在内存中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com