簡體   English   中英

當我的班級和文本文件位於可執行JAR中時,如何編寫代碼訪問文本文件?

[英]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版本中的每個文本文件的處理方式

  1. 獲取每個文本文件的文件名字符串。
  2. 從一個字符串創建一個新的File對象,從另一個字符串創建一個新的FileReader對象。
  3. 它們分別被饋入非索引字表函數和數據輸入迭代器。

我真正需要做的就是一旦這兩個文本文件都放在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM