IO的概念:
主要是指使用JAVA進行輸入輸出操作,JAVA所有IO機制都是基于流進行輸入輸出的,這些資料代表了字元或位元組資料的流動系列
資料流:
資料流是一串連續不斷的資料集合,類似于管道的感覺。采用資料流的目的就是使得輸出輸入獨立于裝置。
輸入流:程式從輸入流讀取外界資料
輸出流:程式向輸出流寫入資料,輸出到外界
資料流分類:
流序列中的資料既可以是未加工的原始二進制資料,也可以是經一定編碼處理後符合某種格式規定的特定資料。
1>位元組流:資料流中最小的資料機關是位元組
2>字元流:資料流中最小的資料機關是字元,JAVA中的字元是Unicode編碼,一個字元占兩個位元組
标準IO:
java.lang.System
public final class System extends Object{
static PrintStream err;//标準錯誤流(輸出)
static InputStream in;//标準輸入(鍵盤輸入流)
static PrintStream out;//标準輸出流(顯示器輸出流)
}
java.IO層次體系:
5個類:(File、OutputStream、InputStream、Writer、Reader)
一個接口:Serializable
1. File(檔案特征與管理):用于檔案或者目錄的描述資訊,例如生成新目錄,修改檔案名,删除檔案,判斷檔案所在路徑等。
2.InputStream(二進制格式操作):抽象類,基于位元組的輸入操作,是所有輸入流的父類。定義了所有輸入流都具有的共同特征。
3.OutputStream(二進制格式操作):抽象類。基于位元組的輸出操作。是所有輸出流的父類。定義了所有輸出流都具有的共同特征。
4.Reader(檔案格式操作):抽象類,基于字元的輸入操作
5.Writer(檔案格式操作):抽象類,基于字元的輸出操作
6.RandomAccessFile(随機檔案操作):它的功能豐富,可以從檔案的任意位置進行讀取(輸入輸出)操作
非流式檔案類(File類):
主要用于命名檔案,查詢檔案屬性和處理檔案目錄
import java.io.File;
import java.io.IOException;
public class TestFile {
public static void main(String args[]) throws IOException {
File dir = new File("\\root");
File f1 = new File(dir, "fileOne.txt");
File f2 = new File(dir, "fileTwo.java");
// 檔案對象建立後,指定的檔案或目錄不一定實體上存在
if (!dir.exists())
dir.mkdir();
if (!f1.exists())
f1.createNewFile();
if (!f2.exists())
f2.createNewFile();
System.out.println("f1's AbsolutePath= " + f1.getAbsolutePath());
System.out.println("f1 Canread=" + f1.canRead());
System.out.println("f1's len= " + f1.length());
String[] FL;
int count = 0;
FL = dir.list();
for (int i = 0; i < FL.length; i++) {
count++;
System.out.println(FL[i] + "is in \\root");
}
System.out.println("there are" + count + "file in //root");
}
}
JAVA流派生關系:
緩沖輸入輸出流BufferedInputStream/BufferedOutputStream:
計算機通路外部裝置非常耗時,為了減少通路外存對計算機的消耗,是以除了程式和流節點間交換資料必須的讀寫極之外,還應該增加緩沖機制。緩沖流就是每一個資料流配置設定一個緩沖區,一個緩沖區就是一個臨時存儲資料的記憶體,這樣可以減少通路硬碟的次數,提高傳輸效率。
BufferedInputStream:資料先寫到緩沖區,待緩沖區寫滿後一次性将資料發送給輸出裝置
将檔案讀入記憶體:
FileInputStream in=new FileInputStream( “file1.txt ” );
BufferedInputStream bin=new BufferedInputStream( in);
BufferedOutputStream:系統從緩沖區讀取資料,待緩沖區為空時,系統才從輸入裝置讀取資料到緩沖區
将記憶體寫入檔案:
FileOutputStreamout=new FileOutputStream(“file1.txt”);
BufferedOutputStream bin=new BufferedInputStream(out);
将鍵盤輸入流讀到記憶體:
InputStreamReader sin=new InputStreamReader (System.in) ;
BufferedReader bin=new BufferedReader(sin);