Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          讀jar包的資源文件

          Posted on 2009-05-30 23:34 啥都寫點 閱讀(323) 評論(0)  編輯  收藏 所屬分類: J2SE
          關鍵技術:
          • 之所以讀取jar包中的資源文件與讀取普通文件不同,是因為文件的路徑問題,jar包中的資源文件的路徑比普通文件的路徑復雜得多。
          • Class類的getResource方法獲得資源文件的URL,通過URL的openStream方法能打開資源文件的輸入流。
          • Class類的getResourceAsStream方法直接打開資源文件的輸入流。
          • 調用Class類的的getResource或者getResourceAsStream方法時,傳入的字符串如果不以“/”開頭,則為資源文件相對于當前class的文件的相對路徑;如果傳入的字符串以“/”開頭,則為資源文件相對于jar根目錄的相對路徑。

          package book.io;


          import java.io.FileInputStream;
          import java.io.FileOutputStream;
          import java.io.ObjectInputStream;
          import java.io.ObjectOutputStream;
          import java.io.Serializable;
          import java.util.Date;
          /**
           * 序列化和反序列化對象
           
          */
          public class SerializeObject {
              
          //    一個內部類,用于被序列化和反序列化。
              
          //一定要實現Serializable才能夠被序列化和反序列化。
              static class MyClass implements Serializable{
                  
          //一般的實例變量會被序列化和反序列化
                  private int a,b;
                  
          //transient實例變量 不會 被序列化和反序列化
                  private transient int c; 
                  
          // 類變量 不會 被序列化和反序列化
                  private static int d;
                  
          public MyClass(){
                  }
                  
          public MyClass(int a, int b, int c, int d){
                      
          this.a = a;
                      
          this.b = b;
                      
          this.c = c;
                      MyClass.d 
          = d;
                  }
                  
          public String toString(){
                      
          return this.a + "  " + this.b + "  " + this.c + "  " + MyClass.d;
                  }
              }

              
          /**
               * 序列化對象到文件
               
          */
              
          public static void serialize(String fileName) throws Exception{
                  
          //創建一個對象輸出流,將對象輸出到文件
                  ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));
                  
          //序列化一個字符串對象到文件
                  out.writeObject("Today:");
                  
          //序列化當前日期對象到文件
                  out.writeObject(new Date());
                  
          //序列化一個MyClass對象
                  MyClass my1 = new MyClass(5678);
                  out.writeObject(my1);
                  out.close();
              }
              
          /**
               * 從文件反序列化到對象
               
          */
              
          public static void deserialize(String fileName) throws Exception{
                  
          //創建一個對象輸入流,從文件讀取對象
                  ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
                  
          //注意讀對象時必須按照序列化對象時的順序讀,否則會出錯
                  
          //讀取字符串對象
                  String today = (String)(in.readObject());
                  System.out.println(today);
                  
          //讀日期對象
                  Date date = (Date)(in.readObject());
                  System.out.println(date.toString());
                  
          //讀MyClass對象,并調用它的add方法。
                  MyClass my1 = (MyClass)(in.readObject());
                  System.out.println(my1.toString());
                  in.close();
                  
          //當恢復對象的時候,對象中的所有域被自動的恢復。如果不希望某個域被序列化,可以在它前面
                  
          //加上transient關鍵字,例如下面的代碼:transient int noSer = 0;
                  
          //類似的,如果類中的某個域為靜態,它不會被序列化。
              }
              
          /**
               * 
          @param args
               
          */
              
          public static void main(String[] args) throws Exception{
                  String fileName 
          = "c:/temp/MyClass.ser";
                  SerializeObject.serialize(fileName);
                  
          //注釋掉第二行,只運行下面一行,將會發現輸出不同
                  SerializeObject.deserialize(fileName);
              }
          }



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 泽州县| 松潘县| 巴中市| 巨鹿县| 沙雅县| 海淀区| 镇原县| 德钦县| 柳林县| 张北县| 从江县| 南京市| 灵宝市| 嘉义县| 威海市| 康平县| 辉南县| 墨玉县| 滨海县| 南乐县| 临澧县| 勐海县| 嘉义市| 碌曲县| 浑源县| 沿河| 西安市| 驻马店市| 洞头县| 济源市| 崇明县| 崇文区| 万山特区| 辽阳县| 巩留县| 桂东县| 巴林右旗| 白河县| 黄梅县| 富锦市| 阳西县|