java io 筆記一:RandomAccessFile(隨機訪問) 類

跟着計劃、今天學習了不少內容、相信忘記的概率很大、因此留下筆記:java

  
  
  
  
  1. package iotest;   
  2.    
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.io.RandomAccessFile;   
  6. import java.util.Date;   
  7.    
  8. import bean.Emp;   
  9.    
  10. public class IoTest {   
  11.    
  12.     /**  
  13.      * @param args  
  14.      * @throws IOException   
  15.      */   
  16.     public static void main(String[] args) throws IOException {   
  17.            
  18.         /*經過將給定路徑名字符串轉換爲抽象路徑名來建立一個新 File 實例。  
  19.          * 注意「//」這裏爲何須要兩個反斜槓呢、由於「/」是特殊字符須要轉義  
  20.          */   
  21.         File file = new File("hzw//1.txt");   
  22.            
  23.         //判斷文件是否存在   
  24.         if(file.exists()){   
  25.             //刪除文件   
  26.             file.delete();   
  27.         }   
  28.            
  29.         /*當且僅當不存在具備此抽象路徑名指定名稱的文件時,不可分地建立一個新的空文件。  
  30.          * 注意、是文件、而不是文件夾  
  31.          */   
  32.         file.createNewFile();   
  33.            
  34.         /*建立此抽象路徑名指定的目錄。  
  35.          *當且僅當已建立目錄時,返回 true;不然返回 false   
  36.          */   
  37.         //file.mkdir();   
  38.            
  39.         /*建立此抽象路徑名指定的目錄,包括全部必需但不存在的父目錄。  
  40.          * 注意,此操做失敗時也可能已經成功地建立了一部分必需的父目錄。  
  41.          * 當且僅當已建立目錄以及全部必需的父目錄時,返回 true;不然返回 false   
  42.          */   
  43.         //file.mkdirs();   
  44.    
  45.         //打印文件名稱   
  46.         System.out.println("File Name:"+file.getName());   
  47.            
  48.         //打印路徑名稱   
  49.         System.out.println("File Path:"+file.getPath());   
  50.            
  51.         //打印此抽象路徑名的絕對路徑名字符串   
  52.         System.out.println("File abs Path:"+file.getAbsolutePath());   
  53.            
  54.         //打印此抽象路徑名父目錄的路徑名字符串;若是此路徑名沒有指定父目錄,則返回 null。   
  55.         System.out.println("File Parent:"+file.getParent());   
  56.            
  57.         //打印該文件存不存在   
  58.         System.out.println(file.exists()?"存在":"不存在");   
  59.            
  60.         //打印該文件可不可讀   
  61.         System.out.println(file.canRead()?"可讀":"不可讀");   
  62.            
  63.         //打印該文件是否是目錄   
  64.         System.out.println(file.isDirectory()?"是目錄":"不是目錄");   
  65.            
  66.         //打印此抽象路徑名錶示的文件最後一次被修改的時間。 lastModified方法返回的是Long類型   
  67.         System.out.println("File last Modi:"+new Date(file.lastModified()));   
  68.            
  69.            
  70.         /*  
  71.          * 存入三條員工信息、每條員工信息爲兩個字段(姓名,年齡)  
  72.          * 在取出員工信息、先取出第二條員工信息、在去除第一條員工信息、最後取出第三條員工信息  
  73.          * 注意是從文件中取  
  74.          */   
  75.            
  76.         //調用寫入方法   
  77.         randomAccessFileW(file);   
  78.            
  79.         //調用讀取方法   
  80.         randomAccessFileR();   
  81.            
  82.            
  83.     }   
  84.        
  85.     /**  
  86.      * RandomAccessFile(隨機訪問)寫入信息  
  87.      * @param file 文件實例對象  
  88.      * @throws IOException  異常類型  
  89.      */   
  90.     public static void randomAccessFileW(File file) throws IOException{   
  91.            
  92.         //構造3條員工信息   
  93.         Emp e1 = new Emp("fd中文sa",23);   
  94.         Emp e2 = new Emp("fd國語hsa",24);   
  95.         Emp e3 = new Emp("f漢字dsa",25);   
  96.            
  97.         /*  
  98.          * 建立從中讀取和向其中寫入("r"字母爲讀、"w"字母爲寫)的隨機訪問文件流,該文件具備指定名稱。  
  99.          */   
  100.         RandomAccessFile ra = new RandomAccessFile("hzw//1.txt","rw");   
  101.            
  102.         /*另一種方法爲  
  103.          * 建立從中讀取和向其中寫入("r"字母爲讀、"w"字母爲寫)的隨機訪問文件流,該文件由 File 參數指定。  
  104.          */   
  105.         //RandomAccessFile ra = new RandomAccessFile(file,"rw");   
  106.            
  107.         /*  
  108.          * write()方法 :將 b.length 個字節從指定 byte 數組寫入到此文件,並從當前文件指針開始。  
  109.          * getBytes方法:將字符串轉換成byte數組。  
  110.          */   
  111.         //ra.write(e1.getName().getBytes());   
  112.            
  113.         /* writeChars方法:按字符序列將一個字符串寫入該文件。  
  114.          * 按字符序列將一個字符串寫入該文件。每一個字符均寫入數據輸出流,  
  115.          * 相似於使用 writeChar 方法。寫入從文件指針的當前位置開始。  
  116.          */   
  117.         ra.writeChars(e1.getName());   
  118.            
  119.         /*  
  120.          * 按四個字節將 int變量值寫入該文件、先寫高字節。  
  121.          */   
  122.         ra.writeInt(e1.getAge());   
  123.         ra.writeChars(e2.getName());   
  124.         ra.writeInt(e2.getAge());   
  125.         ra.writeChars(e3.getName());   
  126.         ra.writeInt(e3.getAge());   
  127.            
  128.         //關閉流   
  129.         ra.close();   
  130.     }   
  131.        
  132.     /**  
  133.      * RandomAccessFile(隨機訪問)讀取信息  
  134.      * @throws IOException 異常類型  
  135.      */   
  136.     public static void randomAccessFileR() throws IOException{   
  137.            
  138.         //定義接收員工姓名的變量   
  139.         String name = "";   
  140.            
  141.         //定義接收read方法返回的數據字節   
  142.         //int len = 0;   
  143.            
  144.         Emp e = new Emp();   
  145.            
  146.         //定義員工姓名(字節)byte數組   
  147.         //byte[] buf = new byte[e.getLen()];   
  148.            
  149.         RandomAccessFile rw = new RandomAccessFile("hzw//1.txt""r");   
  150.            
  151.         /* skipBytes方法  
  152.          * 嘗試跳過輸入的 n個字節以丟棄跳過的字節。  
  153.          * 此方法可能跳過一些較少數量的字節(可能包括零)。  
  154.          * 這可能由任意數量的條件引發;在跳過 n 個字節以前已到達文件的末尾只是其中的一種可能。  
  155.          * 此方法從不拋出 EOFException。返回跳過的實際字節數。若是 n 爲負數,則不跳過任何字節。  
  156.          *   
  157.          *   
  158.          */   
  159.         rw.skipBytes(e.getLen()*2 + 4);//從當前的文件指示器位置在跳轉12個字節   
  160.            
  161.         /* read方法  
  162.          * 今後文件中讀取一個數據字節。以整數形式返回此字節,範圍在 0 到 255 (0x00-0x0ff)。若是尚無輸入可用,將阻塞此方法。  
  163.          * 返回:下一個數據字節,若是已到達文件的末尾,則返回 -1。  
  164.          *       也就是返回到底讀取了多少個字節讀取幾個字節就返回幾  
  165.          */   
  166.         //len = rw.read(buf);   
  167.            
  168.         //構造員工姓名   
  169.         //name = new String(buf,0,len);   
  170.            
  171.         for (int i = 0; i < e.getLen(); i++) {   
  172.                
  173.             /* readChar方法:今後文件讀取一個字符。  
  174.              * 此方法從該文件的當前文件指針開始讀取兩個字節。若是按順序讀取的字節爲 b1 和 b二、  
  175.              * 其中 0 <= b1, b2 <= 25五、則結果將等於: (char)((b1 << 8) | b2)在讀取了這兩個字節、  
  176.              * 檢測到流的末尾或者拋出異常前,此方法一直阻塞  
  177.              */   
  178.             name += rw.readChar();   
  179.         }   
  180.            
  181.         //trim方法是去掉字符串中那些不可顯示的字符(空格、控制字符等)   
  182.         System.out.println("name:"+name.trim()+"年齡:"+rw.readInt());   
  183.            
  184.         /* seek方法  
  185.          * 設置到此文件開頭測量到的文件指針偏移量,在該位置發生下一個讀取或寫入操做。  
  186.          */   
  187.         rw.seek(0) ; //絕對定位跳轉、定位到文件中的第幾個字節處(如:0文件開始處)   
  188. //      len = rw.read(buf);   
  189. //      name = new String(buf,0,len);   
  190.         name ="";   
  191.         for (int i = 0; i < e.getLen(); i++) {   
  192.             name += rw.readChar();   
  193.         }   
  194.            
  195.         /* readInt方法  
  196.          * 今後文件讀取一個有符號的 32 位整數。  
  197.          */   
  198.         System.out.println("name:"+name.trim()+"年齡:"+rw.readInt());   
  199.            
  200.         /*  
  201.          * 當讀完第一條用戶信息時、文件指示器的位置已經移動到了第二條員工信息的開始處。  
  202.          */   
  203.         rw.skipBytes(e.getLen()*2 + 4); //從當前的文件指示器位置在跳轉12個字節(跳轉第二條員工信息)   
  204. //      len = rw.read(buf);   
  205. //      name = new String(buf,0,len);   
  206.         name = "";   
  207.         for (int i = 0; i < e.getLen(); i++) {   
  208.             name += rw.readChar();   
  209.         }   
  210.         System.out.println("name:"+name.trim()+"年齡:"+rw.readInt());   
  211.            
  212.         //關閉流   
  213.         rw.close();   
  214.     }   
  215.        
  216.    
  217. }  

不得不感嘆、網絡的力量、可是有時候又忍不住想罵、算了吧!隨它去、數組

傳智播客、贊一個、下面是他們網絡視頻教程的地址:網絡

看了你會忍不住的說一句:"牛"!dom

我之前怎麼沒發現呢! o(︶︿︶)o !  悔啊~~~白白浪費了那麼多的光陰!ide

相關文章
相關標籤/搜索