I/O(輸入/輸出)
---恢復內容開始---
在變量、數組和對象中儲存的數據是暫時存在的,程序結束後它們就會丟失。為了能夠永久地保存創建的數據,需要將其保存在磁盤文件中,這樣就可以在其他程序中使用它們。Java的I/O技術可以將數據保存到文本文件、二進制文件甚至是ZIP壓縮文件中,以達到永久保存數據的要求。
本節主要講一講輸入輸出流的簡單知識。java語言定義了許多類專門負責方法的輸入和輸出,這些類都被放在java.io包中。其中,所有輸入流類都是抽象類InputStream(字節輸入流)或抽象類Reader(字符輸入流)的子類;而所有輸出流都是抽象類OutputStream(字節輸出流)或抽象類writer(字符輸出流)的子類。
InputStream類是字節輸入流的抽象類,是所有字節輸入流的父類。InputStream是用來處理字節的,並不適合處理字符文本。Java為字符文本的輸入專門提供了一套簡單的類Reader‘,但Reader‘類並不是InputStream類的替換者,只是在處理字符串時化簡了編程。Reader類是字符輸入流的抽象類,所有字符輸入流的實現都是他的子類。
OutputStream類是字節輸出流的抽象類,此抽象類是表示輸出流的所有類的超類。OutputStream類中的所有方法均返回void。
File類是Java.io包中唯一代表磁盤文件本身的對象。File類定義了一些與平臺無關的方法來操作文件,可以通過調用File類中的方法,實現創建、刪除、重命名文件等操作。File類的對象主要用來獲得文件本身的一些信息,如文件所在的目錄、文件的長度、文件讀取權限等。數據流可以將數據寫入文件中,文件也是數據流最常用的數據載體。
例:在項目中創建FileTest,在主方法中判斷D盤的myword文件是否存在word.txt文件,如果該文件存在則將其刪除,不存在則創建該文件。
public class FileTest{ public static void main (String [] args){ File file=new File(“word.txt”); if (file.exists()){ file.delete(); System .out. println(“文件已刪除”); }else { try { file.createNewFile(); System.out.println(“文件已創建”); }catch (Exception e){ e.printStackTrace(); } } } }
File類文件提供了很多方法用於獲取一些文件本身信息。
例:獲取當前文件夾下的word.txt文件的文件名、文件長度並判斷該文件是否為隱藏文件。
public class FileTest { public static void main (String [] args){ File file=new File("word.txt"); if (file.exists()){ String name=file.getName(); long length =file.length(); boolean hidden=file.isHidden(); System .out. println("文件名稱:"+name); System .out. println("文件長度:"+length); System .out. println("該文件是否為隱藏文件嗎?:"+hidden); }else { System .out. println("該文件不存在"); } } }
接下來講的是文件的輸入輸出流,通過舉一個例子幫助讀者理解。
使用FileOutputStream類向文件word.txt寫入信息。然後通過FileOutputStream類將文件中的數據讀取到控制臺。
public class FileTest { public static void main (String [] args){ File file=new File("word.txt"); try { FileOutputStream out =new FileOutputStream(file); byte buy[]="我有一只小毛驢,我從來也不騎。".getBytes(); out.write(buy); out.close(); }catch (Exception e) { e.printStackTrace(); } try { FileInputStream in=new FileInputStream(file); byte byt[]=new byte[1024]; int len =in.read(byt); System.out.print("文件中的信息是:"+new String (byt ,0,len)); in.close(); }catch(Exception e) { e.printStackTrace(); } } }
接下來是帶緩存的輸入輸出流,通過舉一個例子幫助讀者理解。
public class Student { public static void main(String args[]) { String content[]= {"好久不見","最近好嗎","常聯系"}; File file =new File("word.txt"); try { FileWriter fw=new FileWriter(file); BufferedWriter bufw=new BufferedWriter(fw); for (int k=0;k<content.length;k++) { bufw.write(content[k]); bufw.newLine(); } bufw.close(); fw.close(); }catch (Exception e) { e.printStackTrace(); } try { FileReader fr=new FileReader(file); BufferedReader bufr=new BufferedReader(fr); String s=null; int i=0; while ((s=bufr.readLine())!=null) { i++; System.out.println("第"+i+"行:"+s); } bufr.close(); fr.close(); }catch (Exception e) { e.printStackTrace(); } } }
運行結果如下:
數據輸入/輸出流允許應用程序以機器無關的方式從底層輸入流中讀取基本的Java數據類型。
例:分別通過DataOutStream類的writeUTF()、writeChars()和writeBytes()方法向指定的磁盤文件中寫入數據,並通過DataOutStream類的readUTF()方法將寫入的數據輸出到控制臺。
public class Example_01 { public static void main(String []args) { try { FileOutputStream fs=new FileOutputStream("word.txt"); DataOutputStream ds=new DataOutputStream(fs); ds.writeUTF("使用writerUFT()方法寫入數據"); ds.writeBytes("使用writerBytes()方法寫入數據"); ds.close(); FileInputStream fis=new FileInputStream("word.txt"); DataInputStream dis=new DataInputStream(fis); System.out.print(dis.readUTF()); } catch(Exception e) { e.printStackTrace(); } } }
結果如下:
---恢復內容結束---
I/O(輸入/輸出)