在编写代码时使用的是绝对路径来访问的这个文件,然而这个文件是在jar包中的,jar包中有自己的一套Url编址:jar:<url>!/{entry})。所以导致运行时无法访问到文件。
解决办法就是在构造File对象时使用url来构造,而文件的url获取使用ClassLoader
URL fileURL=thisgetClass()getResource("0txt");
File file = new File(fileURL);
FileInputStream fis = new FileInputStream(file);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis));
两种办法 第一: File f = new File(thisgetClass()getResource("/")getPath());
f = new File(fgetPath() + "/conf/configproperties");
注:fgetPath()即为当class所在的绝对路径。如:c:\javasrc\web-inf\classes
然后,对文件对象进行处理,就能把配置信息读取出来了,但是加入如上class被打包成jar文件,那么,在程序执行到这里时,就会无法找到配置文件,那么该如何处理呢?
处理方法如下:
String s_config="conf/configproperties";
File file= new File(StringvalueOf(ClassLoadergetSystemResource(config)));
String filepaths= filegetPath(); 第二:用JarFile JarFile jarFile = new JarFile("thefilejar"); 这个是专门用来读jar文件的
给你个例子,读取configproperties文件。
文件内容(值自己加)如下:
TestHosts =
FormalHosts =
TestConfig =
FormalConfig =
HostsPath =
ConfigPath =
读取文件的类如下:
import javaioBufferedInputStream;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioIOException;
import javaioInputStream;
import javaioUnsupportedEncodingException;
import javautil;
public class EvnConfig{
public static Properties PROPERTIES = new Properties();
static{
String proFilePath = SystemgetProperty("userdir")+"/configproperties";
//Systemoutprintln(proFilePath);
//InputStream propertiesStream = EvnConfigclassgetClassLoader()getResourceAsStream(proFilePath);
InputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(proFilePath));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1printStackTrace();
}
try{
PROPERTIESload(in);
}catch(IOException e){
Systemoutprintln("properties创建失败!");
eprintStackTrace();
}
//Systemoutprintln("EvnConfigtestHosts:"+PROPERTIESgetProperty("TestHosts"));
}
public static final String testHosts = changeCode(PROPERTIESgetProperty("TestHosts"));
public static final String formalHosts = changeCode(PROPERTIESgetProperty("FormalHosts"));
public static final String testConfig = changeCode(PROPERTIESgetProperty("TestConfig"));
public static final String formalConfig = changeCode(PROPERTIESgetProperty("FormalConfig"));
public static final String hostsPath = changeCode(PROPERTIESgetProperty("HostsPath"));
public static final String configPath = changeCode(PROPERTIESgetProperty("ConfigPath"));
public static String changeCode(String str){
String toStr = "";
try {
//Systemoutprintln(str + "转换");
toStr = new String(strgetBytes("ISO-8859-1"),"GB2312");
//Systemoutprintln(str + "转换成功!");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
Systemoutprintln(str + "转换失败!");
eprintStackTrace();
}
return toStr;
}
}
建立一个JavaResources对象,并将它初始化为一个包含我们感兴趣资源的JAR文件--Imagesjar。
然后使用JavaResources类的getResource()方法从logogif取出原始数据,然后调用AWT工具箱的createImage()方法从原始数据建立一个Image对象实例。
建立一个JavaResources对象,并将它初始化为一个包含我们感兴趣资源的JAR文件--Imagesjar。
然后使用JavaResources类的getResource()方法从logogif取出原始数据,然后调用AWT工具箱的createImage()方法从原始数据建立一个Image对象实例。
你是用eclipse写的吧,在eclipse中 src包不是一个文件夹,而是代表你的class文件存放的地址,在你这里,src代表的就是Sysjar!这个文件夹,!的没有特殊意思,就只是这个文件夹名字的组成而已,命名规则中不能用“”,“”,“/”命名,!是可以用的
jar里的properties文件,只能读取,不能写入。ResourceBundle rb=ResourceBundlegetBundle("pack/set/set", LocaleCHINA);
ResourceBundle是java开发中非常实用的一个类,主要用来处理应用程序多语言这样的国际化问题。
如果你的应用程序如果有国际化的需求,可以考虑使用ResourceBundle, 你要做的就是给出满足特定格式的Properties 文件,例如
resourcepropreties
resource_zh_CNproperties
resource_ja_JPproperties
然后应用程序使用ResourceBundlegetBundle(“resource”, locale) 就可以自动的搜索的相应Locale的Properties 文件。
以上就是关于JAVA读取了本地TXT,但是导出JAR并运行时提示系统找不到指定路径求助全部的内容,包括:JAVA读取了本地TXT,但是导出JAR并运行时提示系统找不到指定路径求助、Java eclipse导出的jar怎样读写里面的properties文件、java 程序打包为jar发布后,读取配置文件路径出错 ,怎样获取配置文件路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)