java打包的问题
我的java项目中有个xml文件,在eclipse里面run的时候没有问题,我在解析的时候文件是用
File file4=new File(ParseRead.class.getClassLoader().getResource("NomeFrame.xml").getFile());
打包以后就读取不了了,请问是为什么?
[解决办法]
需要把NomeFrame.xml也一起打包到jar包里
[解决办法]
已经打包进去了,我用exe4j的时候出现了java.io.FileNotFoundException: D:\file:\C:\Users\Administrator\Desktop\JComboBox.jar!\NomeFrame.xml (文件名、目录名或卷标语法不正确。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)错误
打包的时候目录改变了,但是我用的是get class方法呀
[解决办法]
从报错来看,你的Resource已经找到了
ParseRead.class.getClassLoader().getResource("NomeFrame.xml")
只是再getFile的结果不可用而已
D:\file:\C:\Users\Administrator\Desktop\JComboBox.jar!\NomeFrame.xml (文件名、目录名或卷标语法不正确。)
这路径相当奇怪!
[解决办法]
把getFile去掉试试
File file4=new File(ParseRead.class.getClassLoader().getResource("NomeFrame.xml")); [解决办法]
getfile去掉会出现错误,file需要的是url getresourse 还回的是uri
[解决办法]
http://download.csdn.net/detail/wangjiebo/4813743 我把我的jar包上传上来了,帮我看看那里有写错为什么在eclipse里面就可以,打包了就不行了
[解决办法]
是的,我事先也看过这个,所以知道URL,URI
不能强转吗?URL是URI的一种,关键是获得路径不对
不过事先你可以这样测试一下能不能实例化jar中的文件
C:\Users\Administrator\Desktop\JComboBox.jar!\NomeFrame.xml
直接以这种路径构造File对象会有问题吗
[解决办法]
试了一下,直接按路径构造jar包内的文件对象是可以的
接下来就只是获得准确的路径问题了
[解决办法]
我试过了把getfile去掉,改成toURI方法打包以后把jar和xml放在不同目录,比如e:\JComboBox.jar ,e:\NomeFrame.xml这样是没有问题的,我在程序里面直接写
File file=new File("e:/NomeFrame.xml");可以读的到,
但是我的项目是想几个一起共享的,在网上邻居里面,在别的电脑用网上邻居就又读不到路径了
有没有什么办法可以动态改变路径,我在的电脑上就读取e:/xml
在网上邻居就是别的路径
[解决办法]
File file=new File("e:/NomeFrame.xml");
你说的这种普通的文件构造肯定可以啊,我说的是构造jar包内的文件对象。
不过你现在说的貌似需求变了,网上邻居是什么意思,是跨局域网构造文件对象吗?这个又是另外的问题了
[解决办法]
路径问题
用getResourceAsStream()用流获取对文件操作
[解决办法]
NomeFrame.xml放到jar外面,和jar同一级试试
[解决办法]
我是把我的.jar和xml放在我电脑的e盘。
局域网里的电脑通过网络邻居到我的e盘里面执行
[解决办法]
你是说通过局域网内别的机器来启动你本机的程序是吧?如果是这样,和你楼顶的问题不搭界的。
启动后一样是在你本机执行。
路径问题的话我试过了,把getFile换成getPath
[解决办法]
import java.io.File;
import java.net.URL;
public class Test {
public static void main(String[] args) {
new Test().foo();
}
public void foo() {
URL url = ParseRead.class.getClassLoader().getResource("NomeWrite.xml");
System.out.println(url.getPath());
File file4 = new File(url.getPath());
System.out.println(file4.getAbsolutePath());
}
}
[解决办法]
public String Path = "/"+this.getClass().getResource("/xxx.xml").toString().substring(6).replace("%20"," ");
getClass().getResource取得的路径前面会多6个字符 用substring去掉。
getClass().getResource取得的路径里如果有空格 显示的 20% 所以需要把20% 替换成空格