技巧之一
同步輸出目錄
在Java開發過程中
有時候我們要創建一些簡單的類來測試某些功能
測試完成後就從磁盤刪除該類的源文件
因為我們不想讓該類出現在最終的產品中
但是
雖然源文件已經被刪除
編譯好的class文件仍可能留在磁盤上
當有其他的類依賴於該類
就可能導致開發環境的不穩定
在JBuilder中
我們可以設置一個編譯選項來同步(Synchronize)Java的源文件和對應的類
這樣
一旦Java源文件被刪除
對應的class文件也將被刪除
按照如下步驟設置該同步選項
打開 Project | Project Properties
選擇 Compiler 選項卡
看到如下對話框
注意Synchronize output dir選項
選中該選項就可以實現輸出目錄同步
每次編譯時JBuilder將保證Java源文件與Java class文件的同步
輸出調試信息
很多時候
我們要向標准輸出設備輸出一些簡單的變量值
以便了解程序的運行情況
例如
在程序中加入類似下面的代碼
System
out
println(
調試信息: 變量的值是
+ value);
當編寫和調試代碼的工作結束
接下去就要進行最後的編譯和打包
這時就要刪除所有上面這些System
out
println代碼
為了避免這些麻煩
我們可以引入一個邏輯變量debugMode
把它設置為true
並在輸出調試信息之前檢查這個變量的值
if (debugMode)
System
out
println(
調試信息: 變量的值是
+ value);
所有調試工作結束之後
再把debugMode變量設置成false
這樣程序運行時就不會再輸出調試信息
但是
這還不是處理類似調試信息的最佳辦法
我們可以用Diagnostic類來改進
Diagnostic類有三個與輸出流有關的方法
除了標准的System
err輸出流
還可以賦予其他不同的輸出流(例如文件或URL)
最重要的是
當編寫和調試代碼的工作結束之後
我們可以在正式編譯時排除Diagnostic類
從而也就排除了對Diagnostic類方法的所有調用
下面是Diagnostic類中可用於輸出信息的三個方法
print(String message)
輸出信息
println(String message)
輸出信息
並追加行結束符
printlnc(String message)
輸出帶有行結束符
計數器(它的值不斷遞進)和Tab字符的信息
因此
我們可以把上面的System
out
println替換為
Diagnostic
printlnc(
調試信息
變量的值是
+ value);
這些輸出方法的標准輸出設備是System
err
但我們可以用setLogStream(PrintStream log)方法改變它
例如
假設要把輸出發送到log
txt文件
只需插入如下代碼
Diagnostic
setLogStream(new java
io
PrintStream(new
java
io
FileOutputStream(
log
txt
)));
最後
在開發期間
我們只需調用一個方法就可以關閉所有的輸出
Diagnostic
enable(false);
資源捆綁
在Java中
要把直接嵌入到程序的字符串作為資源使用是很容易的
例如
只要把字符串保存到一個獨立的文件
我們就可以很方便地通過創建不同的文件實現對多種語言的支持
為了把
硬編碼
的字符串保存到資源捆綁文件
標准Java API提供兩種辦法
· 把鍵
值對以屬性文件的形式保存到文本文件
· 把鍵
值對保存到Java源文件中的String[][]數組對象
該Java源文件從java
util
ListResourceBundle擴展
第一種方法具有較好的靈活性
可以在不重新編譯的前提下修改字符串值
第二種方法具有較好的性能
但每次修改字符串值
包含鍵
值對的Java源代碼文件都必須重新編譯
JBuilder提供了保存硬編碼字符串值的第三種方法
即com
borland
jb
util
ArrayResourceBundle
ArrayResourceBundle類通過一個String[]數組對象保存鍵的值
但不包含鍵
我們可以通過索引訪問值
即第一個值的索引為
第二個值的索引為
等等
由於可以直接訪問值
因此性能相當好
但也有缺點——維護保存值的文件很困難
因為值和鍵之間沒有直接的(直觀的)聯系
異常跟蹤
在Java中
利用try
catch(
finally)語句可以捕獲和處理異常
非常方便
catch塊的常見異常處理方式是輸出異常
例如把異常輸出到日志文件
Exception類有一個printStackTrace()方法
它能夠從發生異常的方法中輸出堆棧信息
默認輸出位置是System
err
但是
有時候我們要把堆棧信息輸出到System
err之外的其他地方
例如在出現異常時把堆棧信息輸出到email
或者用一個對話框顯示出來
printStackTrace()方法有幾種不同的類型
· printStackTrace()
輸出到標准錯誤流
· printStackTrace(PrintStream ps)
輸出到名為ps的PrintStream
· printStackTrace(PrintWriter pw)
輸出到名為pw的PrintWriter
我們可以用最後一種printStackTrace()方法把堆棧信息保存到String對象
只要在String對象中捕獲了堆棧信息
我們就可以方便地在應用的任何地方使用這些信息了
下面的代碼片斷示范了具體的實現步驟
private String getStackTraceAsString() {
// StringWriter將包含堆棧信息
StringWriter stringWriter = new StringWriter();
//必須將StringWriter封裝成PrintWriter對象
//以滿足printStackTrace的要求
PrintWriter printWriter = new PrintWriter(stringWriter);
//獲取堆棧信息
e
printStackTrace(printWriter);
//轉換成String
並返回該String
StringBuffer error = stringWriter
getBuffer();
return error
toString();
}
快速查看JavaBean基本信息
在JBuilder中
要查看JavaBean的內部信息是非常方便的
我們可以把JavaBean拖入設計窗口中
通過Object Inspector查看JavaBean的屬性和事件
但是
即使不通過設計器
我們也可以查看JavaBean的信息
這就是使用BeanInsight(菜單
Tools | BeanInsight)
點擊Examine Bean按鈕就開始分析指定的JavaBean
在BeanInsight Result區域可以看到分析JavaBean的結果
如果要了解更詳細的信息
點擊
View Details
按鈕
多個行的屬性值
屬性文件是保存應用配置信息的好方法
有了屬性文件
修改應用參數時只需修改簡單的屬性文本文件
無需重新編譯整個應用
屬性文件以
鍵
值
對的形式保存數據
每一個行以鍵開頭
加上一個等於符號
再加上與該鍵對應的值
鍵與值必須在同一個行上
這一點很重要
但是
有些時候
值的內容非常多
如果值能夠分成多行存放
將帶來很大的方便
下面我們就來看看如何使用多行的屬性值
首先
下面這個代碼片斷讀取test
properties屬性文件
try {
Properties p = new Properties();
File file = new File(
test
properties
);
FileInputStream fis = new FileInputStream(file);
p
load(fis);
} catch (IOException ioex) {
ioex
printStackTrace();
}
Properties類的load()方法需要一個輸入流作為參數
這裡我們向它傳入了一個FileInputStream對象
接下來
我們就可以通過調用getProperty()方法從Properties對象獲取屬性值
下面我們來看看test
properties屬性文件的內容
singleline=Single line value
multiline =This example shows how we
can write a property
value over multiple lines in a
properties file
這個屬性文件保存了兩個屬性
鍵分別是singleline和multiline
singleline的值只有一行
而multiline的值有多行
如果我們調用Properties對象的getProperty()方法
並輸出屬性值
結果將是
調用
System
out
println(
singleline?
+ p
getProperty(
singleline
));
System
out
println(
multiline ?
+ p
getProperty(
multiline
));
結果
singleline? Single line value
multiline ? This example shows how we
multiline屬性只包含了第一行值
那麼
如何解決這個問題呢?其實很簡單
只需要在每個行的末尾加上轉義字符
\
就可以了
修改後的屬性文件如下所示
singleline=Single line value
multiline =This example shows how we can write a property value over multiple lines in a properties file
再次讀取屬性文件的值
multiline的屬性值就能夠完整地讀取出來
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27174.html