java基礎——文件(IO)操作1

一、流類

         Java的流式輸入/輸出建立在四個抽象類的基礎上:InputStreamOutputStreamReaderWriter。它們用來創建具體流式子類。儘管程序通過具體子類執行輸入/輸入,但是頂層的類定義了所有流類的基本通用功能。

        InputStreamOutputStream設計成字節流類。ReaderWriter爲字符流設計。字節流和字符流類形成分離的層次結構。一般,處理字符和字符串時應使用字符流類,處理字節或二進制對象時應用字節流類。

 

在操作文件流時,按以下方式進行:

        1.使用File類找到一個文件

        2.通過File類的對象去實例化字節流或字符流的子類

        3.進行字節或字符的讀、寫操作

       4.關閉文件流

 

二、字節流

         FileInputStream類:能從文件讀取字節,常用的兩個構造方法:

	//參數爲文件的絕對路徑
	FileInputStream(String filepath)
	//參數爲文件File的對象
	FileInputStream(File fileObj)

          FileOutputStream類:能向文件寫入字節,常用的兩個構造方法:

	//參數爲文件的絕對路徑
	FileOutputStream(String filePath)
	//參數爲文件File的對象
	FileOutputStream(File fileObj)
	//如果append爲true,文件則以設置搜索路徑模式打開
	FileOutputStream(String filePath,boolean append)

示例:

import java.io.*;
public class StreamDemo{
	public static void main(String args[]){
		File f = new File("c:\\temp.txt") ;
		OutputStream out = null ;
		try{
			out = new FileOutputStream(f) ;
		}catch (FileNotFoundException e){
			e.printStackTrace();
		}
		// 將字符串轉成字節數組
		byte b[] = "Hello World!!!".getBytes() ;	
		try{
			// 將 byte 數組寫入到文件之中
			out.write(b) ;
		}catch (IOException e1){
			e1.printStackTrace();
		}
		try{
			out.close() ;
		}catch (IOException e2){
			e2.printStackTrace();
		}
	
		// 以下爲讀文件操作
		InputStream in = null ;	
		try{
			in = new FileInputStream(f) ;
		}catch (FileNotFoundException e3){
			e3.printStackTrace();
		}
		// 開闢一個空間用於接收文件讀進來的數據
		byte b1[] = new byte[1024] ;
		int i = 0 ;

		try{
			// 將 b1 的引用傳遞到 read()方法之中,同時此方法返回讀入數據的個數
			i = in.read(b1) ;	
		}catch (IOException e4){
			e4.printStackTrace();
		}
		try{
			in.close() ;
		}catch (IOException e5){
			e5.printStackTrace();
		}
	
		//將 byte 數組轉換爲字符串輸出
		System.out.println(new String(b1,0,i)) ;
	}
}

執行結果:

                  

 

三、字符流

        FileReader類:可以讀取文件內容,常用的構造方法同FileInputStream

        FileWriter類:可以寫文件,常用的構造方法同FileOutputStream

示例:

import java.io.*;
public class CharDemo{
	public static void main(String args[]){
		File f = new File("c:\\temp.txt") ;
		Writer out = null ;

		try{
			out = new FileWriter(f) ;
		}catch (IOException e){
			e.printStackTrace();
		}

		// 聲明一個 String 類型對象
		String str = "Hello World!!!" ;

		try{
			// 將 str 內容寫入到文件之中
			out.write(str) ;
		}catch (IOException e1){
			e1.printStackTrace();
		}

		try{
			out.close() ;
		}catch (IOException e2){
			e2.printStackTrace();
		}
		
		// 以下爲讀文件操作
		Reader in = null ;
		
		try{
			in = new FileReader(f) ;
		}catch (FileNotFoundException e3){
			e3.printStackTrace();
		}

		// 開闢一個空間用於接收文件讀進來的數據
		char c1[] = new char[1024] ;
		int i = 0 ;

		try{
		// 將 c1 的引用傳遞到 read()方法之中,同時此方法返回讀入數據的個數
		i = in.read(c1) ;
		}catch (IOException e4){
			e4.printStackTrace();
		}

		try{
			in.close() ;
		}catch (IOException e5){
			e5.printStackTrace();
		}

		//將字符數組轉換爲字符串輸出
		System.out.println(new String(c1,0,i)) ;
	}
}

輸出結果:

             

三、字節流與字符流的轉換

 

字節流和字符流之間轉換的類:

InputStreamReader類:將一個字節流中的字節解碼成字符。主要的構造函數:

    // 用默認字符集創建一個 InputStreamReader 對象
    InputStreamReader(InputStream in)

    // 接受已指定字符集名的字符串,並用該字符集創建對象
    InputStreamReader(InputStream in,String CharsetName)

OuputStreamWriter類:將寫入的字符編碼成字節後寫入一個字節流。主要的構造函數:

   // 用默認字符集創建一個 OutputStreamWriter 對象
   OutputStreamWriter(OutputStream in)
   // 接受已指定字符集名的字符串,並用該字符集創建 OutputStreamWriter 對象
   OutputStreamWriter(OutputStream in,String CharsetNarme)

 

爲了達到最高的效率,避免頻繁地進行字符與字節間的相互轉換,最好不要直接使用這兩個類來進行讀寫,應儘量使用 BufferedWriter類包裝 OutputStreamWriter類, BufferedReader類包裝 InputStreamReader類。

例如:

BufferedWriter out=new BufferedWriter(newOutputStreamWriter(System.out));
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

示例:

import java.io.*;
public class BufferDemo{
	public static void main(String args[]){
		BufferedReader buf = null;
		//System.in是inputStream類型
		//先講字節流轉換成字符流,再將字符流放入到了BufferedReader中
		buf = new BufferedReader(new InputStreamReader(System.in));
		String str = null;
		
		while (true){
			System.out.print("請輸入數字:");
			
			try{
				//等待鍵盤輸入數據
				str = buf.readLine();
			} catch (IOException e){
				e.printStackTrace();
			}

			int i = -1;
			
			try{
				//將輸入的字符串轉換成基本數據類型中的整型
				i = Integer.parseInt(str);
				i++;
				//將數據+1後輸出
				System.out.println("輸入的數字修改後爲:" + i);
				break;
			}catch (Exception e){
				System.out.println("輸入的內容不正確,請重新輸入!");
			}
		}
	}
}

執行結果:

                 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章