API-File型別,IO流,位元組流,緩衝流,資料輸出流
=============================================
File型別
java.io.File型別,可以對硬碟上的檔案以及目錄,進行操作。
如檢視檔案/目錄的屬性資訊,建立,刪除檔案/目錄。此型別
不能檢視和修改檔案裡的內容。
常用構造器:
File(String pathname):
指定一個路徑,建立一個File物件
路徑:
(1)檔案的路徑,要寫到檔案的副檔名為止
(2)目錄的路徑,要寫到當前目錄的名稱為止
一、概念
可以用來建立,刪除檔案/目錄,還可以檢視檔案/目錄的屬性資訊。
但是不可以修改檔案裡的資料。如果需要修改,應該使用輸入/輸出流。
二、常用構造器
File(String pathname)
建立一個指定路徑的File物件
File(File parent,String child)
在指定parent路徑下,建立一個child的file物件
File(String parent,String child)
在指定parent路徑下,建立一個child的file物件
三、
絕對路徑:是從根目錄開始寫的路徑
window: 從碟符開始書寫:
D:\a\f1.txt
D:\a\b
linux: /home/scott/f1.txt
/home/scott
相對路徑: 相對某一檔案/目錄的路徑,不是從根路徑書寫。
reg: f2.txt相對於a目錄的路徑:
window: b\f2.txt
linux: b/f2.txt
reg: f3.txt相對於f2.txt的路徑
../c/f3.txt
四、常用方法
boolean exists();判斷指定的路徑是否存在
boolean isFile();判斷指定路徑是不是檔案
boolean isDirectory();判斷指定路徑是不是目錄
String getName());獲取檔案/目錄名稱
long lastModified();獲取檔案/目錄的最後修改時間
boolean isAbsolute();判斷指定路徑是不是絕對路徑
String getAbsolutePath();獲取絕對路徑
String getParent();獲取父目錄的路徑
long length();獲取檔案大小
檔案/目錄建立方法:
boolean createNewFile();建立檔案
boolean mkdir();建立目錄
boolean mkdirs();建立多級目錄
檔案/目錄的刪除方法
boolean delete()
可以刪除檔案,刪除目錄時,需要目錄下沒有檔案或子目錄
File[] listFiles()
獲取目錄裡的file物件
遞迴:
遞迴思想:分成遞與歸。一層層遞進,最後再一層層歸。
兩種遞迴:
(1) 方法呼叫自己
(2) 方法A呼叫方法B,方法B呼叫A
舉例:
n*(n-1)*......*1
z = f(n) 計算n的階乘
= n*f(n-1)
= n*(n-1)*f(n-2)
= n*(n-1)*......*1
f(n)是一個函式:
裡的邏輯:
n*f(n-1)
練習:
斐波那契數列: 第n個數是第n-1個數與第n-2個數的和。
1,1,2,3,5,8,13,.......
計算第10個數的值。
===============================================
IO流:(Input,Output)
我們在做專案時,除了自定義的一些資料外,還可能需要從"外界"
引入資料,或者將資料匯出到"外界"。這時,我們需要I/O操作。
外界:指的可能是 鍵盤,顯示器,硬碟,另外一個程式。
輸入:又叫讀入操作
資料時從"外界"流向程式
輸出:又叫寫出操作
資料時從程式流向"外界"
流: 就是資料序列, 一經建立成功,就會開啟一個通道。所以使用完
應該進行關閉操作。
IO流的分類:
(1)按照流向分類:
輸入流
輸出流
(2)按照處理的資料單位分類:
位元組流
字元流
(3)按照功能分類:
節點流:直接連線兩個裝置的流型別
處理流:對節點流再次封裝與處理的流型別
======================================
位元組流:
抽象父類 InputStream/OutputStream
檔案位元組流:
FileInputStream/FileOutputStream
(1)構造器:
FileInputStream(File file)
建立一個指定路徑的File物件的檔案輸入流物件
FileInputStream(String name)
建立一個指定路徑的字串的檔案輸入流物件
常用方法:
int read()
讀取該流中的一個位元組資料,即8位二進位制,儲存到一個int數
據的低八位上
如果返回-1,讀至檔案末尾,
long skip(long n)
跳過流中n個位元組
int read(byte[] b)
讀取位元組存入byte陣列中,最多能讀b.length個位元組
返回的是實際讀取的位元組個數
int available()
檢視此輸入流中剩餘的位元組數量
(2)構造器
FileOutputStream(File file)
FileOutputStream(File file, boolean append)
FileOutputStream(String name)
FileOutputStream(String name, boolean append)
建立一個指定路徑的輸出流物件,append表示在檔案末尾追加
PS:如果指定路徑下的檔名不存在,會自動建立。
如果父路徑不存在,則報異常FileNotFoundException
常用方法:
void write(int b)
寫出引數b中的一個位元組,int型別的低八位。
void write(byte[] b)
將位元組陣列b中的位元組按順序寫出
void write(byte[] b,int off,int len)
將位元組陣列b中的位元組按順序寫出,從下標off,寫len個
File:可以建立,刪除,檢視檔案/目錄的資訊。但是不
能檢視/修改檔案裡的內容
刪除目錄時:需要注意使用遞迴思想(不能直接刪除不為空的目錄)
IO流:
用途,傳輸資料。
輸入:讀取資料
輸出: 寫出資料
流:資料序列
分類:
(1)按照流向分類
(2)按照處理的單位分類
(3)按照功能分類
位元組流:
抽象父類:
InputStream:定義了位元組輸入流的常用方法
int available()
void close();
int read():讀取一個位元組,存入int的低八位上,範圍是0-255
int read(byte[] b):
讀取位元組存入位元組陣列b中,返回的是讀取的有效位元組個數。
int read(byte[] b,int off,int len)
skip(int n);
OutputStream:定義了位元組輸出流的常用方法
void close();
void flush();//沖刷,作用是將流的資料,沖刷進檔案中
void write(int b);寫一個位元組
void write(byte[] b);寫一個位元組陣列
void write(byte[] b,int off,int len)
子類:
FileInputStream/FileOutputStream
繼承了位元組流的抽象父類。重寫了方法,並且提供了自己獨有的方法
構造器:
FileInputStream(File file)
FileInputStream(String path)
FileOutputStream(File file)
FileOutputStream(File file,boolean append)
FileOutputStream(String pathname)
FileOutputStream(String pathname,boolean append)
PS:所有的輸出流,對於指定的路徑中的檔案若是不存在,
都會自動建立。
===================================================
緩衝流:
BufferedOutputStream:位元組緩衝輸出流
在寫資料時,如果一個位元組一個位元組的寫,寫的次數明顯很多,效率就會變得很低。
如何提高效率呢。
緩衝輸出流的特點是:在流裡維護了一個緩衝區,寫位元組時,先將位元組
寫入緩衝區, 當緩衝區滿時,再一次性的將資料寫到檔案裡。這樣就
降低了寫的次數,因此提高了效率。
因此緩衝輸出流缺失即時性,可以使用flush方法進行沖刷
常用構造器:
BufferedOutputStream(OutputStream out)
建立一個指定位元組輸出流的緩衝流物件
BufferedOutputStream(OutputStream out,int size)
建立一個指定位元組輸出流的緩衝流物件,並設定緩衝區的大小
PS:當一次寫的位元組超出緩衝區大小,會出現溢位情況,溢位的位元組
會先寫出到檔案中
常用方法:
void write(int b):
寫int資料的低八位,寫入緩衝區內
void write(byte[] b,int off,int len)
寫指定長度len的位元組陣列,寫入緩衝區
BufferedInputStream:位元組緩衝輸入流
在讀取位元組時,也是一個位元組一個位元組的讀,次數多,效率低。
使用緩衝輸入流,內部維護了一個緩衝區,預設8k,先一次性將緩衝區裝滿
等待讀取.
當將緩衝區的資料讀完,緩衝區再次儲存後續資料。讀取的次數明顯降低
效率高
構造器:
BufferedInputStream(InputStream is);
BufferedInputStream(InputStream is,int size);
常用方法:
int read(byte[] bs)
讀取緩衝區裡的位元組儲存bs中,
當一次性得去的位元組小於緩衝區,我們是從緩衝區裡讀資料。
此時,效率高
當一次性讀取的位元組超出緩衝區大小。
不使用緩衝區,直接從檔案裡讀。
int read(byte[] bs,int off,int len)
================================================
資料位元組流,與緩衝流一樣,父類都是過濾位元組流(
FilterOutputStream/FilterInputStream
)
這兩個類提供了幾個特殊的方法,可以直接寫基本資料型別
資料輸出流:DataOutputStream
構造器:
DataOutputStream(OutputStream os)
建立一個指定位元組輸出流的資料輸出流物件
常用方法:
除了提供寫一個位元組和寫一個位元組陣列的方法外,還提供瞭如下方法
writeByte(int b)
writeShort(int s)
writeInt(int i)
writeLong(long l)
writeFloat(float f)
writeDouble(double d);
writeChar(int c);
writeBoolean(boolean b)
writeUTF(String s);