日期:2014-05-20  浏览次数:20931 次

MyEclipse平台项目打包(jar)后 文件路径不对 怎么解决?
在MyEclipse下运行正常 打成jar包后 报错 
  java.io.FileNotFoundException: src\FireAndSea\DE.txt (系统找不到指定的路径。) 


出错的代码如下:

1 public class DateAndEpisode {
2 private String fireDate;
3
4 public DateAndEpisode() {  
5 fs = new File("src/FireAndSea/DE.txt");
6 setFireDate();
7 }
8
9 public void setFireDate() {  
10 try {
11 Scanner input = new Scanner(fs);
12 } catch (FileNotFoundException e) {
13 // TODO Auto-generated catch block
14 e.printStackTrace();
15 }
16 if(input.hasNext())
17 {
18 fireDate = input.next();
19 }else{
20 System.out.println("file is null");
21 }
22 input.close();
23 }

出错地方在第16行,即第一次调用 input 这个scanner对象时报错,大致是因为打包后的jar文件不在是一个文件夹,而是一个文件,相对/绝对路径在一个文件中不在起作用,但是应该怎么去修改,大侠救下谢谢。

------解决方案--------------------
在 Eclipse IDE环境下运行时,当前目录缺省是工程目录,一般来说,就是 src 的上级目录

打成jar包后,就是在你自己的JVM里运行了,环境变量就不会有 Eclipse帮你设置了,所以需要你自己负责。

你这个情况,如果 DE.txt 不是达到jar包里的话,就需要在当前目录建立一个src/FireAndSea的文件夹,把DE.txt放进去
如果DE.txt是打到jar包里的话,要用 class.getResource(), 这个时候,jar包一般是把src以下的文件打包,换句话说,根目录不是项目文件夹了,而是 src 了,路径就要用 /FireAndSea/DE.txt
------解决方案--------------------
把DE.txt文件同class文件放在一起,使用相同路径.如果需要从外部引入文件,为什么要在初始化函数里面读取文件呢?可以通过参数在运行时设值啊!
------解决方案--------------------
探讨

你说的路径改为/FireAndSea/DE.txt 这个我试过了 不行 相同错误

------解决方案--------------------
getClass().getResourceAsStream()会返回一个流对象,可以用 InputStream,或者Reader来操作。
类似的帖子有很多,可以找找看,这个需要注意路径问题