如何从可运行的jar访问和读取.txt文件

时间:2014-09-01 05:07:31

标签: java bufferedreader filereader

如何加载带有可运行的.jar文件的文本文件,当它没有震动时工作正常但是在我对应用程序进行jar后它找不到文件。这是我用来加载文本文件的内容。

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;
        }
    }

}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这有两个原因。文件现在嵌入在Jar中,或者它不是......

假设文件未存储在Jar中,您可以使用类似......

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

如果prices.txt文件隐藏了包结构,则需要提供从top / default包到存储文件的路径。

如果文件在类/ jar文件的外部,那么您需要确保它位于执行jar的同一目录中。

答案 1 :(得分:0)

如果这是你的包结构:

enter image description here

在runnable or.jar文件中检索资源的正确方法是使用getResourceAsStream。

if (button3.isSelected())
{
    System.out.println("You are incorrect. The correct answer is: 24 miles an hour");
    button1.setVisible(false);//set button 1 to invisible
    button2.setVisible(false);//set button 2 invisible
    button3.setVisible(false);//set button 3 invisible.
    group.clearSelection();
}

如果你执行getResource(&#34; /resources/PUT_Request_ER.xml"),你会得到FileNotFoundException,因为这个资源在压缩文件中,绝对文件路径在这里没有帮助。