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

导出JAR后系统找不到指定文件问题。
小弟头一次试着把myeclipse里面的工程导出成jar。导出成功后运行报错系统找不到指定文件。

文件txt就放在工程目录下,代码里面直接用路径调用的
File file = new File("NotesBar.txt");

应该怎么弄?

------解决方案--------------------
把Notesbar.txt放在src下面试试看。
------解决方案--------------------
放在src下只要打成jar包也是不行的,楼主可以看看这篇博文:
http://hxraid.iteye.com/blog/483115
这是一个工具类:
Java code

package com.rs.util;

public class FilePathUtility {
    
    @SuppressWarnings("unchecked")
    public static String getAppPath(Class cls)
    {  
         //检查用户传入的参数是否为空  
         if(cls==null)   
             throw new java.lang.IllegalArgumentException("参数不能为空!");  
         ClassLoader loader=cls.getClassLoader();  
         //获得类的全名,包括包名  
         String clsName=cls.getName()+".class";  
         //获得传入参数所在的包  
         Package pack=cls.getPackage();  
         String path="";  
         //如果不是匿名包,将包名转化为路径  
         if(pack!=null)
         {  
             String packName=pack.getName();  
            //此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库  
             if(packName.startsWith("java.")||packName.startsWith("javax."))   
                 throw new java.lang.IllegalArgumentException("不要传送系统类!");  
             //在类的名称中,去掉包名的部分,获得类的文件名  
             clsName=clsName.substring(packName.length()+1);  
             //判定包名是否是简单包名,如果是,则直接将包名转换为路径,  
             if(packName.indexOf(".")<0)
                 path=packName+"/";  
             else
             {
                 //否则按照包名的组成部分,将包名转换为路径  
                 int start=0,end=0;  
                 end=packName.indexOf(".");  
                 while(end!=-1)
                 {  
                     path=path+packName.substring(start,end)+"/";  
                     start=end+1;  
                     end=packName.indexOf(".",start);  
                 }  
                 path=path+packName.substring(start)+"/";  
             }  
         }  
         //调用ClassLoader的getResource方法,传入包含路径信息的类文件名  
         java.net.URL url =loader.getResource(path+clsName);  
         //从URL对象中获取路径信息  
         String realPath=url.getPath();  
         //去掉路径信息中的协议名"file:"  
         int pos=realPath.indexOf("file:");  
         if(pos>-1) realPath=realPath.substring(pos+5);  
         //去掉路径信息最后包含类文件信息的部分,得到类所在的路径  
         pos=realPath.indexOf(path+clsName);  
         realPath=realPath.substring(0,pos-1);  
         //如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名  
         if(realPath.endsWith("!"))  
             realPath=realPath.substring(0,realPath.lastIndexOf("/"));  
       /*------------------------ 
        ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径 
         中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要 
         的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的 
         中文及空格路径 
       -------------------------*/ 
       try
       {  
         realPath=java.net.URLDecoder.decode(realPath,"utf-8");  
        }
       catch(Exception e)
       {
           throw new RuntimeException(e);
       }  
        return realPath;  
     }//getAppPath定义结束
}