Java 当我的类和文本文件位于可执行JAR中时,如何编写代码来访问文本文件?
我知道这个问题以前被问过很多次,但答案似乎对我没有帮助。以下是我的具体问题: 我有一个类“TaQL”,它从void main(String args[])方法中访问两个文本文件。这两个文本文件与这个类位于同一个包中:包“taql”。以下代码在Eclipse(Mars)IDE中运行良好: 当我输出这两个字符串时,我得到了到资源的正确路径,代码也随之而生 但是,当我将所有内容打包到一个JAR中后使用此方法时,两个字符串都返回“null” 下面是我的代码在非JAR版本中对每个文本文件所做的操作Java 当我的类和文本文件位于可执行JAR中时,如何编写代码来访问文本文件?,java,deployment,executable-jar,Java,Deployment,Executable Jar,我知道这个问题以前被问过很多次,但答案似乎对我没有帮助。以下是我的具体问题: 我有一个类“TaQL”,它从void main(String args[])方法中访问两个文本文件。这两个文本文件与这个类位于同一个包中:包“taql”。以下代码在Eclipse(Mars)IDE中运行良好: 当我输出这两个字符串时,我得到了到资源的正确路径,代码也随之而生 但是,当我将所有内容打包到一个JAR中后使用此方法时,两个字符串都返回“null” 下面是我的代码在非JAR版本中对每个文本文件所做的操作 获取每
要实际访问jar文件中可能存在的那些文件的字节,您需要使用类#getResourceAsStream(stopList)。URI将为您提供无法与File或FileInputStream一起使用的路径。它在您的IDE中工作,因为IDE尚未打包文件,因此#getPath会找到实际的文件路径 因此,请尝试以下方法:
try (Reader inputReader =
new InputStreamReader(
TaQL.class.getResourceAsStream(input))) {
BufferedReader in = new BufferedReader(inputReader);
for (String line; (line = in.readLine()) != null;) {
// do something with the line
}
}
要实际访问jar文件中可能存在的那些文件的字节,您需要使用类#getResourceAsStream(stopList)。URI将为您提供无法与File或FileInputStream一起使用的路径。它在您的IDE中工作,因为IDE尚未打包文件,因此#getPath会找到实际的文件路径 因此,请尝试以下方法:
try (Reader inputReader =
new InputStreamReader(
TaQL.class.getResourceAsStream(input))) {
BufferedReader in = new BufferedReader(inputReader);
for (String line; (line = in.readLine()) != null;) {
// do something with the line
}
}
啊,所以一旦它在罐子里,你就必须处理流,而不是文件,对吗?对。这将安全地访问它,无论它是如何包装的。是的,这是有效的。有没有办法一次读入整个文件,或者一行一行地读入?好的@Bey,你的问题有点超出范围,但我更新了我的答案,包括如何一行一行地读入文件。谢谢..我知道我有点“贪婪”…这就是为什么我首先接受了你的答案。我讨厌人们用“…哦,还有…”的问题把别人串在一起。非常感谢!啊,所以一旦它在罐子里,你就必须处理流,而不是文件,对吗?对。这将安全地访问它,无论它是如何包装的。是的,这是有效的。有没有办法一次读入整个文件,或者一行一行地读入?好的@Bey,你的问题有点超出范围,但我更新了我的答案,包括如何一行一行地读入文件。谢谢..我知道我有点“贪婪”…这就是为什么我首先接受了你的答案。我讨厌人们用“…哦,还有…”的问题把别人串在一起。非常感谢!将其视为jar中的文本文件是不正确的,jar本身就是一个文件,因此“文本文件”只是jar归档文件的一部分。@JamesWierzba谢谢James…这是我的困惑!流式输入解决了这个问题。将其视为jar中的文本文件是不正确的,jar本身就是一个文件,所以“文本文件”只是jar存档文件的一部分。@JamesWierzba感谢James…这是我的困惑!流式输入解决了这个问题。
try (Reader inputReader =
new InputStreamReader(
TaQL.class.getResourceAsStream(input))) {
BufferedReader in = new BufferedReader(inputReader);
for (String line; (line = in.readLine()) != null;) {
// do something with the line
}
}