2讀取文本文件的主要技術問題
在J2ME中如何讀取文本文件的內容,在本系統中寫了一個函數用來讀取指定的文本文件,文本文件做為參數傳給該函數,該函數的返回值為字符串類型,將文件的內容做為一個完整的字符串返回。在讀取文件內容時用到的主要技術,使用InputStream類定義一個輸入字節流對象in,使用 ByteArrayOutputStream類定義一個內存數組輸出字節流對象s,通過輸入對象的in.read()方法來讀取一個字節,將讀出的字節通過s.write( )方法加入到s中,再使用s.toString()方法將內存轉為字符串返回。讀取文本文件的函數定義如下:
private String myReadLine (String testFileName) {
//函數頭定義了函數的參數為文件名組成的字符串,返回值為一個字符串。
InputStream in = this.getClass().getResourceAsStream(testFileName);
//由文件名參數來定義一個輸入流對象變量in
ByteArrayOutputStream s;
s = new ByteArrayOutputStream(); //產生內存數組輸出字節流對象變量S
try{
int ch=0;
ch=in.read(); //由輸入流對象變量in的read方法以字節為單位來讀取文件的內容,讀取到文件尾時的值為-1。
while ( ch!= -1 ) {
//如果未讀到文件尾把讀取的內容寫入S變量中,並讀取下一字節內容
s.write( ch );
ch=in.read();
}
in.close(); //關閉輸入流對象。
} catch (IOException ioe){
System.out.println(ioe.toString());
}
String str = s.toString(); //將S變量轉為字符串
try{
s.close(); //關閉輸出流對象
} catch (IOException ioe){
System.out.println(ioe.toString());
}
return str.trim(); //返回文件中的內容字符串
}
3 將文本文件內容顯示出來的技術
通過Form類定義一個表單對象f,通過對象的f.append()的方法將讀取文本文件返回的字符串內容加入到表單對象中,為了該表單內容在閱讀完之後可以返回上一級顯示界面,通過f.addCommand()方法在表單中加入一個按鈕對象,並通過f.setCommandListener(this)方法注冊CommandListener高級事件處理,這樣當選擇按鈕時即可調用CommandListener 高級事件接口類中的commandAction()函數,在該函數中判斷是哪個按鈕被選中,通過該函數中的代碼來決定處理流程。最後通過Display類的Display.setCurrent()方法將含有文件內容的表單顯示在手機屏幕上。處理代碼如下:
Form f=new Form("超級閱讀"); //創建一個Form對象f
strContent=myReadLine ("/test1.txt"); //讀取test1.txt文件中的內容返回字符串
f.append(strContent); //將文本文件的內容加入到f對象中
f.addCommand(exitCom); //將退出按鈕選項加入到f對象中
f.setCommandListener(this); //注冊高級事件處理
display.setCurrent(f); //將f對象顯示到手機屏幕上
4 閱讀器中的菜單設計技術
本閱讀器菜單結構分兩級,一級菜單顯示各章的標題,通過選擇某一標題選項進入該章進行內容閱讀,在章內容界面中設置二級菜單選項,二級菜單中只有一個選項即是返回選項,選中該選項後,則回到上一級,可重新選擇章標題,進入新一章內容進行閱讀。一級菜單通過List類來建立,首先產生一個List類的對象l,通過l.append("第一章",null)方法在l對象中加入一條選項,用同樣的方法可加入多條選項,只要將第一章改為第二章、第三章等,可產生一個有多選項的l對象,通過l.addCommand(exitCommand)方法在l對象中加入一個按鈕,作為退出按鈕選項,通過l.setCommandListener(this)注冊高級事件處理機制,通過該高級事件的注冊在操作過程中選中某一選項時,系統自動調用commandAction()函數,並將選中的選項做為參數傳遞給該函數,在函數中判斷選中的是哪一個選項,進行不同的流程處理。最後通過Display類的Display.setCurrent(l)方法將第一級菜單界面顯示在手機屏幕上。一級菜單界面的定義如下:
List l=new List("超級閱讀--小說",Choice.IMPLICIT); //定義一個List對象l
l.addCommand(exitCommand); //在對象l中加入退出按鈕
l.append("第一章",null); //加入第一章選項標題
l.append("第二章",null); //加入第二章選項標題
l.append("第三章",null); //加入第三章選項標題
l.setCommandListener(this); //注冊高級事件處理機制
display.setCurrent(l); //將界面顯示在手機屏幕上
在閱讀器的菜單設計中,無論是選擇了章標題選項,還是選擇了一級菜單中的退出或者是閱讀章內容界面中的退出選項,都將進入commandAction()函數中,在該函數中進行相應判斷進入不同的處理流程代碼。
主要程序代碼如下:
public void commandAction(Command c,Displayable s)
{
if(c==exitCommand)
{//如果是一級菜單的退出按鈕選項則退出本系統
notifyDestroyed();
}
else if (c==exitCom)
{//若是閱讀章內容中的退出按鈕選項則退出閱讀內容界面返回一級菜單界面
startApp();
resumeRequest();
}
else
{//如果選擇的不是任何一個退出按鈕,則進行選擇章標題的判斷
String strContent;
List tmp=(List)s; //將參數s進行類型轉換,轉換為List類對象
switch(tmp.getSelectedIndex())
//判斷選中的是哪一章標題則進行該章內容閱讀界面
{ case 0:
//第一章選中打開test1.txt
Form f=new Form("超級閱讀");
strContent=myReadLine ("/test1.txt");
f.append(strContent);
f.addCommand(exitCom);
f.setCommandListener(this);
display.setCurrent(f);
break;
case 1:
//第二章選中打開test2.txt方法同第一章(略)
case 2:
//第三章選中打開test3.txt,如果還有更多章可按此方法再增加
} // switch 多分支結構語句結束
} //if 選擇結構結束
} // commandAction函數結束