因項目需求,需要把工程打成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哈哈~