[英]How can I write code to access a text file when my class and the text file are in an Executable JAR?
我知道這個問題已經被問過很多次了,但是答案似乎並沒有幫助我。 這是我的具體問題:
我有一個“ TaQL”類,可以從其void main(String args [])方法中訪問兩個文本文件。 這兩個文本文件與該類位於同一軟件包中:軟件包“ taql”。 以下代碼在Eclipse(Mars)IDE中運行良好:
String stoplist = TaQL.class.getResource(stoplist).toURI().getPath();
String input = TaQL.class.getResource(input).toURI().getPath();
當我輸出這兩個字符串時,我會獲得正確的資源路徑,並且代碼雜亂無章。
但是,當我將所有內容打包到JAR中之后使用此方法時,兩個字符串都將返回“ null”。
這是我的代碼對非JAR版本中的每個文本文件的處理方式
我真正需要做的就是一旦這兩個文本文件都放在JAR中,就可以無縫訪問它們,然后使用對它們的某種引用來創建File和FileReader對象。
這是我放入主方法中的一些診斷代碼。 它將顯示JAR文件和文件所看到的內容(請注意,輸入和非中斷列表都是文件名字符串):
System.out.println("intput argument" + input);
System.out.println("Resource path"+TaQL.class.getResource(stoplist));
stoplist = TaQL.class.getResource(stoplist).toURI().getPath();
input = TaQL.class.getResource(input).toURI().getPath();
System.out.println("Path"+stoplist);
System.out.println("Input path" + input);
運行程序的JAR版本的命令行輸出(請注意,當我從Eclipse運行時,此代碼工作得很好)
要實際訪問jar文件中可能存在的那些文件的字節,您需要使用Class#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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.