Java jar文件在系统文件存在并遵循正确路径时未找到系统文件
我在运行.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) 以下是我如何访问这些文件的一些源代码: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
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)));