Java jar文件在系统文件存在并遵循正确路径时未找到系统文件

Java jar文件在系统文件存在并遵循正确路径时未找到系统文件,java,linux,netbeans,jar,Java,Linux,Netbeans,Jar,我在运行.jar时收到这些文件未找到异常,但在netbeans中运行我的应用程序时却没有。以下是错误消息,顶部有当前目录打印 adam@Adam~/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist$java-jar“EveMarketCalculater.jar” 当前系统目录:/home/adam/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist java.io.Fi

我在运行.jar时收到这些文件未找到异常,但在netbeans中运行我的应用程序时却没有。以下是错误消息,顶部有当前目录打印

adam@Adam~/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist$java-jar“EveMarketCalculater.jar”

当前系统目录:/home/adam/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist

java.io.FileNotFoundException:file:/home/adam/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist/EveMarketCalculater.jar/inputOutput/TypeID.csv(无此类文件或目录) 位于java.io.FileInputStream.open0(本机方法) 在java.io.FileInputStream.open(FileInputStream.java:195) 位于java.io.FileInputStream。(FileInputStream.java:138) 位于java.io.FileInputStream。(FileInputStream.java:93) 位于java.io.FileReader。(FileReader.java:58) 在inputOutput.csvParser.readFile(csvParser.java:54)中 位于inputOutput.csvParser。(csvParser.java:24) 在evemarketcalculater.evemarketcalculater.main(evemarketcalculater.java:39)

java.io.FileNotFoundException:file:/home/adam/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist/EveMarketCalculater.jar/inputOutput/Regions.csv(无此类文件或目录) 位于java.io.FileInputStream.open0(本机方法) 在java.io.FileInputStream.open(FileInputStream.java:195) 位于java.io.FileInputStream。(FileInputStream.java:138) 位于java.io.FileInputStream。(FileInputStream.java:93) 位于java.io.FileReader。(FileReader.java:58) 在inputOutput.csvParser.readFile(csvParser.java:54)中 位于inputOutput.csvParser。(csvParser.java:24) 在evemarketcalculater.evemarketcalculater.main(evemarketcalculater.java:42)

java.io.FileNotFoundException:file:/home/adam/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist/EveMarketCalculater.jar/inputOutput/SolarSystems.csv(无此类文件或目录) 位于java.io.FileInputStream.open0(本机方法) 在java.io.FileInputStream.open(FileInputStream.java:195) 位于java.io.FileInputStream。(FileInputStream.java:138) 位于java.io.FileInputStream。(FileInputStream.java:93) 位于java.io.FileReader。(FileReader.java:58) 在inputOutput.csvParser.readFile(csvParser.java:54)中 位于inputOutput.csvParser。(csvParser.java:24) 在evemarketcalculater.evemarketcalculater.main(evemarketcalculater.java:45)

java.io.FileNotFoundException:file:/home/adam/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist/EveMarketCalculater.jar/inputOutput/MyOrders.csv(无此类文件或目录) 位于java.io.FileInputStream.open0(本机方法) 在java.io.FileInputStream.open(FileInputStream.java:195) 位于java.io.FileInputStream。(FileInputStream.java:138) 位于java.io.FileInputStream。(FileInputStream.java:93) 位于java.io.FileReader。(FileReader.java:58) 在inputOutput.csvParser.readFile(csvParser.java:96)中 位于inputOutput.csvParser。(csvParser.java:29) 在evemarketcalculater.evemarketcalculater.main(evemarketcalculater.java:48)

以下是我如何访问这些文件的一些源代码:

    public final void readFile(String file, int index1, int index2)
{
    BufferedReader br = null;
    String line = "";
    String cvsSplit = ",";
    idList = new ArrayList();

    try
    {
       URL url = csvParser.class.getResource(file);

       br = new BufferedReader(new FileReader(url.getPath()));

       while((line = br.readLine()) != null)
       {
           String[] item = line.split(cvsSplit);

           idList.add(item[index1].replace("\"",""));
           idList.add(item[index2].replace("\"",""));
       }
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }

    if(br != null)
    {
        try
        {
            br.close();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }

}


    public static void writeMyOrders()
{
    URL url = csvParser.class.getResource("MyOrders.csv");

    FileWriter w = null;
    csvWriter c = null;

    try
    {
        // Empty file cotents
        PrintWriter writer = new PrintWriter(url.getPath());
        writer.close();

        w = new FileWriter(url.getPath());

        c = new csvWriter();
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }

    for(int i = 0; i < myOrders.size(); i++)
    {
        try
        {
            c.writeLine(w, myOrders.get(i));
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }

    if(w != null)
        try
        {
            w.close();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }

}
public final void readFile(字符串文件,int index1,int index2)
{
BufferedReader br=null;
字符串行=”;
字符串cvsSplit=“,”;
idList=newarraylist();
尝试
{
URL=csvParser.class.getResource(文件);
br=新的BufferedReader(新的文件读取器(url.getPath());
而((line=br.readLine())!=null)
{
字符串[]项=行分割(cvsSplit);
添加(项[index1]。替换(“\”,”);
添加(项[index2]。替换(“\”,”);
}
}
捕获(例外情况除外)
{
例如printStackTrace();
}
如果(br!=null)
{
尝试
{
br.close();
}
捕获(例外情况除外)
{
例如printStackTrace();
}
}
}
公共静态无效writeMyOrders()
{
URL=csvParser.class.getResource(“MyOrders.csv”);
FileWriter w=null;
csvWriter c=null;
尝试
{
//空文件组件
PrintWriter=新的PrintWriter(url.getPath());
writer.close();
w=新文件编写器(url.getPath());
c=新的csvWriter();
}
捕获(例外情况除外)
{
例如printStackTrace();
}
对于(int i=0;i
有什么线索说明这不起作用吗?它显然是在跟踪正确的文件路径,而这些文件存在于.jar文件的这些路径中。如果这很重要的话,我正在Linux命令行中运行

这是文件存在的证据


在创建
BufferedReader
时尝试使用以下语句:

br = new BufferedReader(new InputStreamReader(csvParser.class.getResourceAsStream(file)));
Class.getResource()
返回
URL
,而
Class.getResourceAsStream()
提供
InputStream
,您可以从中直接读取文件内容

解释 从错误消息中可以看出,应用程序无法找到文件
file:/home/adam/Dropbox/linuxWorkspace/Netbeans/evemarketcalculator/dist/EveMarketCalculater.jar/inputOutput/TypeID.csv
。要验证这一点,您可以尝试使用任何其他应用程序打开上述文件,如
gedit
chrome
vi
。如果您可以打开它,您的应用程序也可以这样做

您从
getResource()
返回的
URL
中获得了这样一个路径。当它是
getResourceAsStream()
时,系统会为您提供一个
InputStream
,其中包含您要查找的资源

你可以选择
 br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(file)));