我正在研究一個程序文件系統的概念。我正在用Java編寫(使用JDK 7 u17)。爲什麼我的測試文件系統只能在內存中工作?
要開始,我建立了一些教程,展示瞭如何使用FileSystemProvider類創建基於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?");
}
}
}
你有沒有打過電話'fs.close( )'在退出之前? – TAS 2013-03-25 07:50:45
@TAS ...哇,我覺得愚蠢,我所遵循的例子顯然是不完整的。關閉文件系統解決了我的問題。謝謝! – ianc1215 2013-03-25 07:53:59