2014-09-01 52 views
0

如何加載帶有runnable .jar文件的文本文件,它在沒有發生問題時工作正常,但在我發現應用程序無法找到文件後。這是我用來加載文本文件。如何從可運行的jar文件中訪問和讀取.txt文件

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 

public class PriceManager { 

    private static Map<Integer, Double> itemPrices = new HashMap<Integer, Double>(); 

    public static void init() throws IOException { 
     final BufferedReader file = new BufferedReader(new FileReader("prices.txt")); 
     try { 
      while (true) { 
       final String line = file.readLine(); 
       if (line == null) { 
        break; 
       } 
       if (line.startsWith("//")) { 
        continue; 
       } 
       final String[] valuesArray = line.split(" - "); 
       itemPrices.put(Integer.valueOf(valuesArray[0]), Double.valueOf(valuesArray[1])); 
      } 
      System.out.println("Successfully loaded "+itemPrices.size()+" item prices."); 
     } catch (final IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (file != null) { 
       file.close(); 
      } 
     } 
    } 

    public static double getPrice(final int itemId) { 
     try { 
      return itemPrices.get(itemId); 
     } catch (final Exception e) { 
      return 1; 
     } 
    } 

} 

感謝您的任何和所有幫助。

+0

文件'prices.txt'與你的jar在同一個目錄下嗎? – lxcky 2014-09-01 05:10:15

+0

prices.txt不在src文件夾中 – 2014-09-01 05:15:44

+0

請嘗試將它放在與runnable.jar – lxcky 2014-09-01 05:19:32

回答

1

有兩個原因。無論是文件現在嵌入到罐中或者它不是...

假設文件沒有存儲在罐中,你可以使用類似...

try (BufferedReader br = new BufferedReader(new InputStreamReader(PriceManager.class.getResourceAsStream("/prices.txt")))) {... 

如果prices.txt文件與包結構一起被埋沒,您需要提供從頂層/默認包到文件存儲位置的路徑。

如果該文件是類/ jar文件的外部文件,那麼您需要確保它位於執行jar的同一目錄中。

+0

當我嘗試這樣做 BufferedReader file = new BufferedReader(new InputStreamReader(PriceManager。 class.getResource( 「/ prices.txt」))); 我剛剛得到的錯誤:InputStreamReader(URL)是undefined – 2014-09-01 05:17:52

+0

然後導入'InputStreamReader',就像你有'BufferedReader'和其他你想使用的類一樣... – MadProgrammer 2014-09-01 05:30:21

+1

@Cody你想使用'getResourceAsStream ',而不是'getResource'。 – VGR 2014-09-01 05:49:45

0

,如果這是你的包結構:

enter image description here

內運行的or.jar文件中檢索資源的正確方法是使用的getResourceAsStream。

InputStream resourceStream = TestResource.class.getResourceAsStream("/resources/PUT_Request_ER.xml"); 

如果你做的getResource(「/資源/ PUT_Request_ER.xml」),你會得到FileNotFoundException異常,因爲這資源內壓縮文件和絕對文件路徑在這裏沒有幫助。