隨筆-72  評論-20  文章-0  trackbacks-1
          1.   Map的遍歷
          有人看了這個標題可能發笑,因為這實在太簡單,難道我在湊字數?可是根據我自己的經驗來說,人的歲數長的時候記憶力卻不跟著長,倒有不進反退的現象。我就是雖然寫過很多遍但仍然用到的時候就忘個干凈,在這里寫一下強化記憶J
          SortedMap pDataMap = new TreeMap();
          Iterator itor = pDataMap.entrySet().iterator();
                 while(itor.hasNext()){
                     Map.Entry vEntry = (Entry) itor.next();
                      vEntry.getKey();
              vEntry.getValue();
                      //做一些其他的事……
          }
          2.   文件操作
          本文主要關注簡單的對象序列化的相關操作,對于更為詳細的操作過程,請參照《Java編程思想 2e》。
          2.1.文件過濾器
          文件過濾器主要用在FileChooser或者File.listFiles()方法中,用于過濾掉一些與本程序無關的類型文件。本例給出一個察看給定文件后綴名的文件過濾器,對于給定的文件察看其文件名,如果和給定的后綴名一致則返回true,否則返回false。
          publicclass RecorderFileFilter implements FilenameFilter
          {
              /**后綴名 **/
                  String postfixStr;
           
                  public RecorderFileFilter(String postfix){
                      this.postfixStr = postfix;
                  }
           
                  publicboolean accept(File dir, String name) {
                      /**只判斷后文件的綴名是否正確即可 **/
                      if( name.endsWith(postfixStr) )
                              returntrue;
                          else
                              returnfalse;
                  }
          }
          2.2.對象的保存與讀取
          首先介紹一下我的程序的存儲結構:我的數據保存在兩種類型的文件中,即“時間字符串.data”和“時間字符串.plan”兩種類型。其中.data文件是一個HashMap<String,String>類的序列化文件,而.plan文件是一個SortedMap<String,String>類的序列化文件。他們都保存在“user.dir/data”目錄下。下面的這些方法的功能是讀取/保存這個目錄下數據文件,如果你想保存你自定義的文件到指定目錄,下面的代碼至需要稍微修改一下即可使用:
          /**用以標識讀入數據的類型,也是文件后綴名**/
              publicstaticfinal String DATA_TYPE = ".data";
              publicstaticfinal String PLAN_TYPE = ".plan";
           
              /**以程序運行目錄作為基目錄**/
              publicstatic File appDir = new File(System.getProperty("user.dir"));
              publicstatic File imgDir = new File(appDir,"img");
              publicstatic File dataDir = new File(appDir,"data");
              publicstatic File reportDir = new File(appDir,"report");
           
              publicstatic FileInputStream fIn;
              publicstatic FileOutputStream fOut;
              publicstatic ObjectInputStream objIn;
              publicstatic ObjectOutputStream objOut;
           
           
              /**---------------功能函數部分----------------------**/
              /**
               *查找并讀入"user.home/data/"目錄下所有的記錄文件,將其放到一個Map
               *HashMapKey為文件名,也是欠款人帳戶的ID號。
               *關于獲得的文件的具體信息請參照技術說明書。
               *如果pType=DATA_TYPE,則dataMap的格式為<String,HashMap>
               *     pType=PLAN_TYPE,則dataMap的格式為<String,SortedMap>
               *@returnSortedMap
               */
              publicstatic HashMap loadAll(String pType){
                  /** 數據文件名(簡歷賬號的時間)即為ID **/
                  HashMap vDataMap = new HashMap();
           
                  /**后綴名為data的即為數據文件**/
                  File[] dataFiles = dataDir.listFiles(new RecorderFileFilter(pType));
           
                  for(int i = 0; i < dataFiles.length; i++){
                      try{
                          if( pType.equals(FileUtil.DATA_TYPE) ){
                              HashMap<String,String> hMap = (HashMap<String,String>)loadObjectFromFile(dataFiles[i]);
                              /**去掉文件名的后綴名即或得key,也就是欠款帳戶ID**/
                              vDataMap.put(hMap.get("id"),hMap);
                          }elseif( pType.equals(FileUtil.PLAN_TYPE) ){
                              SortedMap<String,SortedMap> hMap = (SortedMap<String,SortedMap>)loadObjectFromFile(dataFiles[i]);
                              /**去掉文件名的后綴名即或得key,也就是欠款帳戶ID**/
                              vDataMap.put(StringUtil.clearFileName(dataFiles[i]) ,hMap);
                          }else
                              thrownew Exception("讀取了錯誤的文件類型");
           
                      }
                      catch(Exception ex) {
                          MessageUtil.showErrMsg("讀取數據時出現錯誤,數據有可能丟失!"+
                              "\n 文件名為:"+dataFiles[i].getName());
                      }
                  }
                  return vDataMap;
              }
           
           
              /**
               *將給定內容存入文件中.
               *@parampContentMapMap其所裝內容為<id(String), HashMapSortedMap>
               */
              publicstaticvoid saveAll(HashMap<String,String> pDataMap,SortedMap<String,String> pPlanMap){
                  Iterator itor = pDataMap.entrySet().iterator();
                  while(itor.hasNext()){
                      Map.Entry vEntry = (Entry) itor.next();
                      String id = (String) vEntry.getKey();
                      saveToFile(id,pDataMap,pPlanMap);
                  }
              }
           
           
              /**
               *將制定欠款賬戶的信息存入文件中
               *@paramidString          這個信息在保存欠款協議時不可或缺
               *@parampDataMapSortedMap
               *@parampPlanMapSortedMap
               */
              publicstaticvoid saveToFile(String id, HashMap<String,String> pDataMap,
                  SortedMap<String,String> pPlanMap){
                  try{
                  if( pDataMap != null )
                 saveObjectToFile(new File(dataDir,id+DATA_TYPE), pDataMap);
                      if( pPlanMap != null )
                          saveObjectToFile(new File(dataDir,id+PLAN_TYPE), pPlanMap);
              }
                  catch(Exception ex) {
                      MessageUtil.showErrMsg("保存數據時出現錯誤,數據沒有被正確保存!");
                  }
              }
           
           
              /**
               *將文件中的序列化對象讀出來
               *@parampFileFile
               *@returnObject
               *@throwsException
               */
              publicstatic Object loadObjectFromFile(File pFile) throws Exception {
                  fIn = new FileInputStream(pFile);
                  objIn = new ObjectInputStream(fIn);
                  Object obj = objIn.readObject();
                  fIn.close();
                  objIn.close();
                  return obj;
              }
           
           
              /**
               *將對象序列化到相應的文件中去--保存數據時候專用,因為該函數將數據保存在appDir/data目錄下
               *@parampFileNameString
               *@paramobjObject
               *@throwsException
               */
              publicstaticvoid saveObjectToFile(File pFile,Object pObj) throws Exception
              {
                  fOut = new FileOutputStream(pFile);
                  objOut = new ObjectOutputStream(fOut);
                  objOut.writeObject(pObj);
                  fOut.close();
                  objOut.close();
              }
           
          2.3.其他
          由于每個程序都有圖標文件,所以從制定目錄讀入圖標應該是每個程序都會用到的。其次,刪除指定目錄下的指定類型文件似乎也很常用J
              /**img文件夾中獲取圖標**/
              publicstatic ImageIcon getImageIcon(String pImageFileName){
                 File imgFile = new File(imgDir,pImageFileName);
                 ImageIcon imageIcon = new ImageIcon(imgFile.getAbsolutePath());
                 return imageIcon;
              }
           
              /**清除reportDir目錄下所有html文件**/
              publicstaticvoid clearReportFiles(){
                  File vReportDir = new File(reportDir.getAbsolutePath());
                  File[] vReportFiles = vReportDir.listFiles(new FilenameFilter(){
                  publicboolean accept(File dir, String name){
                          if( name.endsWith("html"))
                              returntrue;
                          returnfalse;
                  }
              });
                  for(int i = 0; i < vReportFiles.length; i++)
                      vReportFiles[i].delete();
          }
          posted on 2007-07-27 22:29 前方的路 閱讀(160) 評論(0)  編輯  收藏 所屬分類: Java技術
          主站蜘蛛池模板: 巫溪县| 盐津县| 读书| 抚宁县| 广宁县| 门源| 保德县| 仁怀市| 同仁县| 永仁县| 四子王旗| 五峰| 银川市| 邹城市| 仪征市| 读书| 岫岩| 衡山县| 大余县| 大同县| 铜梁县| 界首市| 聂荣县| 山阴县| 思南县| 寿阳县| 霍山县| 镇安县| 宁德市| 吉隆县| 台湾省| 波密县| 万全县| 卢龙县| 安国市| 聂拉木县| 普兰县| 珠海市| 沅江市| 栖霞市| 武川县|