【发布时间】:2015-12-18 17:51:44
【问题描述】:
我的程序显示从文本文件中读取的元素。文本文件将存储在包含 .java 和 .class 文件的包文件夹中的文件夹中,以便它们可以嵌入到 jar 中。
我正在尝试让应用程序在这两种情况下都能正确读取文本文件
- 从 IDE (Netbeans) 运行
- 从 JAR 运行
目前我可以毫无问题地完成第一点,但代码使用File 读取,而我看到如何使用Jars 执行此操作的方式是使用InputStream。
适用于 IDE 的函数运行
public void loadWidgets() {
ArrayList<String> results = new ArrayList<>();
String dir = new File("").getAbsolutePath() + "/src/Creator/textFiles/widgets/;
System.out.println(dir);
getWidgetFiles(dir, results);
results.stream().forEach((s) -> {
readFile(s); // given a string and it opens the file using a Scanner
});
updateWidgetVariables(); // gui updates
}
public void getWidgetFiles(String dirName, ArrayList<String> filePaths) {
File directory = new File(dirName);
File[] files = directory.listFiles();
for (File file : files) {
if (file.isFile()) {
filePaths.add(file.getName() + "," + file.getAbsolutePath());
} else if (file.isDirectory()) {
getWidgetFiles(file.getAbsolutePath(), filePaths);
}
}
}
所以我有一堆按小部件类型组织的文本文件,所以我在 /widgets/ 目录中运行以查找所有文本文件。
我遇到的问题是如何浏览 Jar 的目录和文件?它们可以转换为文件,还是读入字符串?
我从question 获得了这个代码,它可以读取文件,但我不知道如何使用new Scanner(file); 代码打开它们
CodeSource src = WidgetPanel.class.getProtectionDomain().getCodeSource();
try {
System.out.println("Inside try");
List<String> list = new ArrayList<>();
if (src != null) {
URL jar = src.getLocation();
ZipInputStream zip = new ZipInputStream(jar.openStream());
ZipEntry ze = null;
System.out.println(jar.getPath());
System.out.println(zip.getNextEntry());
while ((ze = zip.getNextEntry()) != null) {
String entryName = ze.getName();
System.out.println("Entry name: " + entryName);
if (entryName.startsWith("Creator/textFiles/widgets") && entryName.endsWith(".txt")) {
list.add(entryName);
System.out.println("Added name: " + entryName);
}
}
list.stream().forEach((s) -> {
readFile(s);
});
updateWidgetVariables();
} else {
System.out.println("Src null");
}
}catch (IOException e) {
System.out.println(e.getMessage());
}
【问题讨论】:
-
Java 的哪个版本?
-
你可以直接用 unzip 解压 jar 或者使用docs.oracle.com/javase/tutorial/deployment/jar/view.html
-
@fge 版本 8 在 NorbertvanNobelen 我不明白这有什么帮助? jar运行时需要读取文件,不需要查看文件。
-
嗯,这当然有帮助;你知道 JSR 203 的存在吗?
-
在发布之前查看类似主题时从未见过提及它。对我的情况有帮助吗?
标签: java file jar inputstream