【发布时间】:2012-09-21 08:35:36
【问题描述】:
假设我正在制作一个程序,该程序需要在我的 .jar 文件中复制 .txt 文件中的所有行。它在包program.files 中,名为text.txt。我一直在寻找整个互联网,我找不到我要找的东西。我认为这个想法:
public String readSpecificFromJar(String dir, int line) {
String read = null;
try {
InputStream in = getClass().getResourceAsStream(dir);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(in));
/**
* declare string variable and prime the read
*/
read = bufferedReader.readLine();
for (int i = 1; i < line; i++) {
read = bufferedReader.readLine();
}
bufferedReader.close();
} catch (IOException ioexception) {
Dialogs.fail("Could not read txt file from the JAR!!! Error Code: 06");
}
return read;
}
会起作用,但我试过了,但它给了我各种错误。我认为问题在于声明InputStream in 的方式是它希望文件使用Main 方法就在那儿。我将如何改变这一点,所以事实并非如此?提前致谢!
编辑:
由于一些混乱,我想澄清这一点。对于字符串dir,我输入files/text.txt。它不会工作。我该如何解决这个问题?
编辑 2:
好吧,我觉得问题没有解决,而且我有点生气,主要是因为我很累。适用于不同程序的代码在上面,其中dir 就是"text.txt"
这对我正在做的事情不起作用,我不知道为什么。同样,该文件位于类路径中,因此dir 仅是"text.txt"。我希望我的 .txt 文件为 "files/text.txt"。我该怎么做?
编辑 3:
我不知道我是否提到过,但我的 .txt 文件在我的 jar 内。只是为了消除混乱。所以真的,.jar 文件的路径并不重要,因为我不应该用dir 输入它。此外,主类在包main 中,.txt 文件在包files 中,都在同一个名为copy 的程序中。另外,我尝试将 txt 文件移动到与 main 类相同的包中,但也没有用。
编辑 4:
顺便说一句,包含从 jar 读取方法的包是IO。正如io 类在包IO 中一样。我的所有文件(例如图像和 txt)都在包 files 中。只是想我清楚了。我尝试将 txt 文件移动到 io 类的包中,这有效,但如果它在任何其他包中,即使我在 dir 中包含包名,它也不会工作。有什么想法吗?
【问题讨论】:
-
.txt 文件需要在 CLASSPATH 中。你的 JAR 文件有清单吗?这应该。将 .txt 文件的路径添加到 CLASSPATH 中,它应该可以正常工作。
-
最好加上text.txt的字符编码,比如
new InputStreamReader(in, "Windows-1252")。因此,在其他操作系统和国家/地区一切正常。readLine()在文件末尾产生 null ,否则行 without 行结束。read += br.readLine() + "\n";左右也是如此。 -
尝试将“program/files/text.txt”作为“dir”传入,因为那是包名
-
好主意,但没用 :(
-
您是否尝试过像“/program/files/test.txt”一样将目录设为绝对目录?
标签: java io inputstream bufferedreader