跟着計劃、今天學習了不少內容、相信忘記的概率很大、因此留下筆記:java
- package iotest;
- import java.io.File;
- import java.io.IOException;
- import java.io.RandomAccessFile;
- import java.util.Date;
- import bean.Emp;
- public class IoTest {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- /*經過將給定路徑名字符串轉換爲抽象路徑名來建立一個新 File 實例。
- * 注意「//」這裏爲何須要兩個反斜槓呢、由於「/」是特殊字符須要轉義
- */
- File file = new File("hzw//1.txt");
- //判斷文件是否存在
- if(file.exists()){
- //刪除文件
- file.delete();
- }
- /*當且僅當不存在具備此抽象路徑名指定名稱的文件時,不可分地建立一個新的空文件。
- * 注意、是文件、而不是文件夾
- */
- file.createNewFile();
- /*建立此抽象路徑名指定的目錄。
- *當且僅當已建立目錄時,返回 true;不然返回 false
- */
- //file.mkdir();
- /*建立此抽象路徑名指定的目錄,包括全部必需但不存在的父目錄。
- * 注意,此操做失敗時也可能已經成功地建立了一部分必需的父目錄。
- * 當且僅當已建立目錄以及全部必需的父目錄時,返回 true;不然返回 false
- */
- //file.mkdirs();
- //打印文件名稱
- System.out.println("File Name:"+file.getName());
- //打印路徑名稱
- System.out.println("File Path:"+file.getPath());
- //打印此抽象路徑名的絕對路徑名字符串
- System.out.println("File abs Path:"+file.getAbsolutePath());
- //打印此抽象路徑名父目錄的路徑名字符串;若是此路徑名沒有指定父目錄,則返回 null。
- System.out.println("File Parent:"+file.getParent());
- //打印該文件存不存在
- System.out.println(file.exists()?"存在":"不存在");
- //打印該文件可不可讀
- System.out.println(file.canRead()?"可讀":"不可讀");
- //打印該文件是否是目錄
- System.out.println(file.isDirectory()?"是目錄":"不是目錄");
- //打印此抽象路徑名錶示的文件最後一次被修改的時間。 lastModified方法返回的是Long類型
- System.out.println("File last Modi:"+new Date(file.lastModified()));
- /*
- * 存入三條員工信息、每條員工信息爲兩個字段(姓名,年齡)
- * 在取出員工信息、先取出第二條員工信息、在去除第一條員工信息、最後取出第三條員工信息
- * 注意是從文件中取
- */
- //調用寫入方法
- randomAccessFileW(file);
- //調用讀取方法
- randomAccessFileR();
- }
- /**
- * RandomAccessFile(隨機訪問)寫入信息
- * @param file 文件實例對象
- * @throws IOException 異常類型
- */
- public static void randomAccessFileW(File file) throws IOException{
- //構造3條員工信息
- Emp e1 = new Emp("fd中文sa",23);
- Emp e2 = new Emp("fd國語hsa",24);
- Emp e3 = new Emp("f漢字dsa",25);
- /*
- * 建立從中讀取和向其中寫入("r"字母爲讀、"w"字母爲寫)的隨機訪問文件流,該文件具備指定名稱。
- */
- RandomAccessFile ra = new RandomAccessFile("hzw//1.txt","rw");
- /*另一種方法爲
- * 建立從中讀取和向其中寫入("r"字母爲讀、"w"字母爲寫)的隨機訪問文件流,該文件由 File 參數指定。
- */
- //RandomAccessFile ra = new RandomAccessFile(file,"rw");
- /*
- * write()方法 :將 b.length 個字節從指定 byte 數組寫入到此文件,並從當前文件指針開始。
- * getBytes方法:將字符串轉換成byte數組。
- */
- //ra.write(e1.getName().getBytes());
- /* writeChars方法:按字符序列將一個字符串寫入該文件。
- * 按字符序列將一個字符串寫入該文件。每一個字符均寫入數據輸出流,
- * 相似於使用 writeChar 方法。寫入從文件指針的當前位置開始。
- */
- ra.writeChars(e1.getName());
- /*
- * 按四個字節將 int變量值寫入該文件、先寫高字節。
- */
- ra.writeInt(e1.getAge());
- ra.writeChars(e2.getName());
- ra.writeInt(e2.getAge());
- ra.writeChars(e3.getName());
- ra.writeInt(e3.getAge());
- //關閉流
- ra.close();
- }
- /**
- * RandomAccessFile(隨機訪問)讀取信息
- * @throws IOException 異常類型
- */
- public static void randomAccessFileR() throws IOException{
- //定義接收員工姓名的變量
- String name = "";
- //定義接收read方法返回的數據字節
- //int len = 0;
- Emp e = new Emp();
- //定義員工姓名(字節)byte數組
- //byte[] buf = new byte[e.getLen()];
- RandomAccessFile rw = new RandomAccessFile("hzw//1.txt", "r");
- /* skipBytes方法
- * 嘗試跳過輸入的 n個字節以丟棄跳過的字節。
- * 此方法可能跳過一些較少數量的字節(可能包括零)。
- * 這可能由任意數量的條件引發;在跳過 n 個字節以前已到達文件的末尾只是其中的一種可能。
- * 此方法從不拋出 EOFException。返回跳過的實際字節數。若是 n 爲負數,則不跳過任何字節。
- *
- *
- */
- rw.skipBytes(e.getLen()*2 + 4);//從當前的文件指示器位置在跳轉12個字節
- /* read方法
- * 今後文件中讀取一個數據字節。以整數形式返回此字節,範圍在 0 到 255 (0x00-0x0ff)。若是尚無輸入可用,將阻塞此方法。
- * 返回:下一個數據字節,若是已到達文件的末尾,則返回 -1。
- * 也就是返回到底讀取了多少個字節讀取幾個字節就返回幾
- */
- //len = rw.read(buf);
- //構造員工姓名
- //name = new String(buf,0,len);
- for (int i = 0; i < e.getLen(); i++) {
- /* readChar方法:今後文件讀取一個字符。
- * 此方法從該文件的當前文件指針開始讀取兩個字節。若是按順序讀取的字節爲 b1 和 b二、
- * 其中 0 <= b1, b2 <= 25五、則結果將等於: (char)((b1 << 8) | b2)在讀取了這兩個字節、
- * 檢測到流的末尾或者拋出異常前,此方法一直阻塞
- */
- name += rw.readChar();
- }
- //trim方法是去掉字符串中那些不可顯示的字符(空格、控制字符等)
- System.out.println("name:"+name.trim()+"年齡:"+rw.readInt());
- /* seek方法
- * 設置到此文件開頭測量到的文件指針偏移量,在該位置發生下一個讀取或寫入操做。
- */
- rw.seek(0) ; //絕對定位跳轉、定位到文件中的第幾個字節處(如:0文件開始處)
- // len = rw.read(buf);
- // name = new String(buf,0,len);
- name ="";
- for (int i = 0; i < e.getLen(); i++) {
- name += rw.readChar();
- }
- /* readInt方法
- * 今後文件讀取一個有符號的 32 位整數。
- */
- System.out.println("name:"+name.trim()+"年齡:"+rw.readInt());
- /*
- * 當讀完第一條用戶信息時、文件指示器的位置已經移動到了第二條員工信息的開始處。
- */
- rw.skipBytes(e.getLen()*2 + 4); //從當前的文件指示器位置在跳轉12個字節(跳轉第二條員工信息)
- // len = rw.read(buf);
- // name = new String(buf,0,len);
- name = "";
- for (int i = 0; i < e.getLen(); i++) {
- name += rw.readChar();
- }
- System.out.println("name:"+name.trim()+"年齡:"+rw.readInt());
- //關閉流
- rw.close();
- }
- }
不得不感嘆、網絡的力量、可是有時候又忍不住想罵、算了吧!隨它去、數組
傳智播客、贊一個、下面是他們網絡視頻教程的地址:網絡
看了你會忍不住的說一句:"牛"!dom
我之前怎麼沒發現呢! o(︶︿︶)o ! 悔啊~~~白白浪費了那麼多的光陰!ide