当前位置: 代码迷 >> J2SE >> 导出JAR后系统找不到指定文件有关问题
  详细解决方案

导出JAR后系统找不到指定文件有关问题

热度:84   发布时间:2016-04-24 01:57:26.0
导出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定义结束}
  相关解决方案