因项目需求,需要把工程打成jar包,但是出现了在MyEclipse工程里运行没问题,通过cmd调用运行就出问题的现象,报错是报空指针,调用jar包不在的问题。网上查阅了好多资料,在下面两个网页中找到了原因。
问题1:文件流,乱码问题
有一些文件流只能在工程里读写没问题,但是打到jar包就有问题了,可能会导致乱码,这里 给出了一些标准的文件读写操作。
转载自:http://www.cnblogs.com/manongxiaojiang/archive/2012/10/13/2722068.html
java读取txt文件内容。可以作如下理解:
-
首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。
-
通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了。接下来需要解读成乙方可以理解的东西
-
既然你使用了FileInputStream()。那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据
-
解读完成后要输出呀。那当然要转换成IO可以识别的数据呀。那就需要调用字节码读取的方法BufferedReader()。同时使用bufferedReader()的readline()方法读取txt文件中的每一行数据哈。
package
com.campu;
import
java.io.BufferedInputStream;
import
java.io.BufferedReader;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.InputStreamReader;
import
java.io.Reader;
/**
* @author 码农小江
* H20121012.java
* 2012-10-12下午11:40:21
*/
public
class
H20121012 {
/**
* 功能:Java读取txt文件的内容
* 步骤:1:先获得文件句柄
* 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取
* 3:读取到输入流后,需要读取生成字节流
* 4:一行一行的输出。readline()。
* 备注:需要考虑的是异常情况
* @param filePath
*/
public
static
void
readTxtFile(String filePath){
try
{
String encoding=
"GBK"
;
File file=
new
File(filePath);
if
(file.isFile() && file.exists()){
//判断文件是否存在
InputStreamReader read =
new
InputStreamReader(
new
FileInputStream(file),encoding);
//考虑到编码格式
BufferedReader bufferedReader =
new
BufferedReader(read);
String lineTxt =
null
;
while
((lineTxt = bufferedReader.readLine()) !=
null
){
System.out.println(lineTxt);
}
read.close();
}
else
{
System.out.println(
"找不到指定的文件"
);
}
}
catch
(Exception e) {
System.out.println(
"读取文件内容出错"
);
e.printStackTrace();
}
}
public
static
void
main(String argv[]){
String filePath =
"L:\\Apache\\htdocs\\res\\20121012.txt"
;
// "res/";
readTxtFile(filePath);
}
}
|
问题2:找不到第三方jar包
转载自:http://blog.csdn.net/hhb200766/article/details/8841014
将java工程打成jar包,但第三方jar包并没有包含在包中,当在命令行中运行jar包时,出现类找不到的异常,
在网上看到解决办法是将第三方jar包放到JDK的扩展类文件夹中(%JAVA_HOME%/jre/lib/ext),
再运行,还是出现同样的错误,我的java工程要调用webservice,webservice工程中也用到了相同的jar包,
在启动服务器的时候,不能正确部署webservice,应该是webservice工程中的jar包和JDK中的jar包有了冲突。
通过不断地试验,终于成功了!
1、新建文件夹test位于D盘;
2、将用到的所有第三方jar包放在文件夹lib下,再将lib放在test下;
3、导出的java工程jar包a.jar也放在test下;
4、修改工程jar包META-INF文件夹下的MANIFEST.MF配置文件:
Manifest-Version: 1.0
Main-Class: cn.golaxy.yqpt.client.main.GatherMain
Class-Path: lib/soapmonitor-1.5.jar
lib/spring-aop.jar
写明main函数的包路径(注意:冒号后加一个空格)!
在class-path后写上引用到的所有jar包(注意:要分行写,并不是说一行写一个jar包,只要保证这一行不要太长就好,否则会出现Exception in thread "main" java.io.IOException: line too long
at java.util.jar.Attributes.read(Attributes.java:356)
at java.util.jar.Manifest.read(Manifest.java:167)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at java.util.jar.JarFile.getManifest(JarFile.java:158)
异常,换行时前面加两个空格,最后还有一个回车)!
5、将修改好的MANIFEST.MF文件覆盖掉原来的;
6、在命令行下执行jar包:java -jar a.jar。
够详细的了吧,希望能帮到你O(∩_∩)O哈哈~