1. 程式人生 > >I/O(輸入/輸出)

I/O(輸入/輸出)

while 類定義 leo post 字節 lose void 簡單的 ring

---恢復內容開始---

在變量、數組和對象中儲存的數據是暫時存在的,程序結束後它們就會丟失。為了能夠永久地保存創建的數據,需要將其保存在磁盤文件中,這樣就可以在其他程序中使用它們。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(輸入/輸出)