java的輸入輸出與文件讀寫
按照數據的傳輸方向,流 以是未經加工的原始二進制數據,又可以是經過一定編碼處理後符合某種格式規定的
特定數據,即流是由位(bits)組合或者字符(character)構成的序列,如字符流序列、數字流序列。
將數據從外設或外存(如:鍵盤、鼠標、文件)傳遞到應用程序的流稱為輸入流(input stream);將數據從應用程序傳遞到外存或外設(屏幕、打印機)的流稱為輸出流(output stream)。即:輸入流讀取數據(這裡指的是應用程序讀取數據),輸出流寫入數據(這裡指的是應用程序寫入數據)。
流式輸入輸出的特點:
1、是數據的獲取和發送是沿著數據序列順序進行,每個數據必須等待排在它前面的數據讀入或者送出之後才能被讀寫,每次讀寫操作處理的都是序列中剩余的未讀寫數據的第一個,而不能隨選擇輸入輸出的位置。
2、采用數據流來處理輸入輸出使得應用程序的輸入輸出操作獨立於相關設備,每一個應用程序可以用於多個輸入輸出設備,而不需要對源代碼作出任何修改。增強了程序的可移植性。
輸入輸出流按照處理數據的類型分為:字節流(bate stream)和字符流(character stream)。字節流每次讀寫8位二進制數,由於它只能講數據以二進制的方式讀寫,而不能分解、重組和理解這些數據,所以可以使之變換、恢復到原來的有意義的狀態,因此字節流有稱為二進制流(binary byte stream)或位流。而字符流一次讀寫16位二進制數,並將其作為一個字符而不是二進制位來處理。
字節流:處理字節數據(基本類型為InputStream、OutputStream)
字符流:處理字符數據(基本類型為Reader、Writer)
文件類:File,用於對磁盤文件和文件夾的管理。即:File是對文件存儲的關注,比如文件最後的修改時間、存儲位置等,而流是對文件內容的關注。這是二者的區別。
示例1:在程序中創建一個文本文件file.txt,寫入從鍵盤輸入的一串字符,然後再讀取該文件並將文本文件的內容顯示在屏幕上。
//filename:FileTest.java import java.io.*; class FileTest{ public static void main(String[] args){ char ch; int data; try{ FileInputStream fis = new FileInputStream(FileDescriptor.in);//聲明並創建FileInputStream類型對象,初始化對象為鍵盤輸入 FileOutputStream fos = new FileOutputStream("d:\\myfile.txt");//聲明並創建FileOutputStream類型對象,初始化對象 System.out.println("請輸入一串字符串,並以 # 結束:"); while((ch=(char)fis.read()) != '#')//強制類型轉換為char並判斷 fos.write(ch); fin.close(); fos.close(); FileInputStream fi = new FileInputStream("d:\\myfile.txt");//聲明並創建FileInputStream類型對象,初始化對象 FileOutStream fo = new FileOutputStream(FileDescriptor.out);//聲明並創建FileOutputStream類型對象,初始化對象 while(fi.avaliable() > 0) { data = fi.read(); fo.write(data); } fi.close(); fo.close(); } catch(FileNotFoundException e){ System.out.println("文件沒找到"); } } }
示例2:用FileInputStream和FileOutputStream實現對二進制圖像文件的復制
//filename:ImageFileTest.java import java.io.*; public Class ImageFileTest{ public static void main(String[] args) throws IOException{ FileInputStream fi = new FileInputStream("d:\\scenery.jpg);//聲明並創建FileInputStream類型的對象,初始化對象 FileOutputStream fo = new FileOutputStream("d:\\copyScenery.jpg");//聲明並創建FileOutputStream類型的對象,初始化對象 byte [] b = new byte[fi.available()];//創建byte類型的數組 fi.read(b);//將圖形文件讀入b數組 fo.write(b);//將b數組的數據寫入新文件'copyScenery.jpg' System.out.println("文件已被復制並更名"); fi.close(); fo.close(); } }
原文: http://1395573703.iteye.com/blog/2351371