程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2ME平台下文本閱讀器的實現

J2ME平台下文本閱讀器的實現

編輯:J2ME
0引言
    隨著通訊技術的發展及手機的普及 ,人們正在不斷地給手機增加新的功能 ,其中 ,使手機實現一般只有 PC機才具有的功能——下載各種程序並運行 ,是目前手機發展的一個重要方向。為此 ,人們提出了各種各樣的解決方案 ,其中基於 Java的 J2 ME方案無疑是最引人注目的。
    本文通過J2ME開發一個文本閱讀器,該程序可下載到手機上,隨時隨地的進行閱讀,這樣就可以通過這種方式開發一些學習軟件,使手機用戶可有一個隨身學習的工具書。由於J2ME不可以對手機中的文件進行讀寫,所以在開發本程序時,只能在程序打包時把文本文件作為資源文件加入到J2ME發布程序中。如果想讀寫手機上的文件,則要使用各手機商家提供的特定開發平台和專用的類來開發,下面就文本閱讀器的關鍵技術進行說明。
1 J2ME文本閱讀器中的文本格式
    J2ME中文本文件的格式,為了便於程序的開發和在運行中的讀寫處理,對要處理的文本文件要進行一定格式的整理。本程序中的文本要求用純文本即可,每章為一個獨立的文件,每一章中均可為多段,在文本中加入的空格和各種符號都可在閱讀時如實的顯示出來。文件寫好後將其存入相應項目文件夾下的res文件夾中,如本文中的閱讀器的項目名為test,則可將文本文件存入test\res文件夾下。
    本系統要閱讀三章內容,所以制作了三個文本文件,分別命名為test1.txt、test2.txt、test3.txt,將三個文件存入test\res文件夾中,到此文本內容准備完成。

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函數結束

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved