201711671235學習《java程式設計》第十週學習總結
教材學習內容總結
1.輸入、輸出流
輸入流 | 輸出流 |
OutPutStream類或Writer類的子類 | |
read()讀入源中資料 | write()把資料寫入目的地 |
2.File類
File類物件主要用於獲取檔案本身的資訊
其中directoryPath是目錄名,filename是檔名
構造方法 | |
File(String filename) | |
File(String directoryPath,String filename) | |
File(File dir,String filename) |
2.1檔案屬性
public String getName() | 獲取檔名 |
public boolean canRead() | 判斷檔案是否可讀 |
public boolean canWrite() | 判斷檔案是否可被寫入 |
public boolean exists() | 判斷檔案是否存在 |
public long length() | 獲取檔案的長度(單位是位元組) |
public String getAbsolutePath() | 獲取檔案的絕對路徑 |
public String getParent() | 獲取檔案的父目錄 |
public boolean isFlie() | 判斷一個檔案是否是一個普通檔案,而不是目錄 |
public boolean isDirectory() | 判斷檔案是否是一個目錄 |
public boolean isHidden() | 判斷檔案是否是隱藏檔案 |
public long lastModified() | 獲取檔案最後修改的時間 |
2.2目錄
建立目錄
File物件呼叫 | |
public boolean mkdir() | 建立成功返回true,反之亦然(目錄已存在返回false) |
列出目錄檔案
public String[] list() | 字串形式返回目錄下的全部檔案 |
public File[] listFiles() |
用File物件形式返回目錄下的全部檔案 |
列出指定型別的檔案
public String[] list(FilenameFilter obj) | 字串形式返回目錄下指定型別的全部檔案 |
public File[] listFiles(FilenameFilter obj) | 用File物件形式返回目錄下指定型別的全部檔案 |
FilenameFilter 是一個介面,介面中的方法:
public boolean accept(File dir,String name)
2.3檔案的建立與刪除
檔案物件 | File file=new File(“c:\\myletter”,”letter.txt“) | |
public boolean createNewFile() |
新建檔案 | 沒有letter.txt檔案,file.createNewFile()新建 |
public boolean delete() |
刪除當前檔案 | file.delete() |
2.4執行可執行檔案
要執行一個本地機器上的可執行檔案,使用java.lang包中的Runtime類
宣告+建立物件:Runtime ec=Runtime.getRuntime();
ce.exec(String command)開啟本地機器上的可執行檔案或執行一個操作。
3.檔案位元組輸入/出流
使用流四個步驟
輸入流 | 輸出流 | |
設定源 | 給出目的地 | |
建立輸入流 | 建立輸出流 | |
讀取資料 | 把資料寫入目的地 | |
關閉 | 關閉 |
構造方法
FileInputStream(String name) | 檔名建立FileInputStream流 | 引數file和name指定輸入流的源 |
FileInputStream(File file) | File物件建立.... | |
zaitry-catch語句中的1try語句執行,IOException(IO異常) |
FileOutputStream(String name,【boolean append】) | 檔名建立FileOutputStream流 | append為true時不能重新整理檔案,在檔案末尾開始寫入資料; 引數file和name指定輸出流的目的地 |
FileOutputStream(File file,【boolean append】) | File物件建立.... | |
zaitry-catch語句中的1try語句執行,IOException(IO異常) |
讀取位元組
int read() | 從源中讀取單個位元組的資料 |
int read(byte b[]) | 讀取b.length個位元組放到b[]中 |
int read(byte b[],int off,int len) | 指定從位元組陣列的某個位置開始存放讀取的資料 |
寫位元組
void write(int n) | 向目的地寫入單個位元組的資料 |
void write(byte b[]) | 向目的地寫入一個位元組陣列 |
void write(byte b[],int off,int len) | 起始位置為off處取len個位元組寫到目的地 |
關閉流
in.close()
4.檔案輸入輸出流
構造方法
FileReader(String filename||File filename) | 輸入流 |
FileWriter(String filename||File filename) | 輸出流 |
FileReader(String filename,boolean append) | |
FileWriter(String filename,boolean append) |
4.1Reader類提供的read方法以字元為單位順序地讀取源中的資料。
int read(); | int read(char b[]); |
int read(char b[], int off, int len); | void close(); |
long skip(long numBytes); |
4.2Writer流以字元為單位順序地寫檔案,每次呼叫write方法就順序地向目的地寫入內容。
Writer類有如下常用的方法:
void write(int n) | 向輸出流寫入一個字元 |
void write(byte b[]) | 向輸出流寫入一個字元陣列 |
void write(byte b[],int off,int length) | 從給定字元陣列中起始於偏移量off處取len個字元寫到輸出流 |
void close() | 關閉輸出流 |
輸出流.flush() | 沖洗當前緩衝區,即把緩衝區的內容吸入到目的地 |
5.緩衝流
BufferedReader和BufferedWriter類建立的物件稱作緩衝輸入、輸出流;二者的源和目的地必須是字元輸入流和字元輸出流。
5.1構造方法:
BufferedReader(Reader in); | 讀取文字行 |
BufferedWriter (Writer out) | 將資料寫到目的地 |
5.2BufferedReader和BufferedWriter類讀寫檔案的方法:
readLine() | 讀取文字行 |
write(String s,int off,int len) | 把字串s寫到檔案中 |
newLine() | 向檔案寫入一個回行符 |
6 .隨機流
使用RandomAccessFile類來建立一個隨機訪問檔案流;RandomAccessFile類建立的流的指向既可以作為源也可以作為目的地。
6.1構造方法:
RandomAccessFile(String name,String mode) | 引數name確定檔名 | 引數mode取r(只讀)或rw(可讀寫),決定建立的流對檔案的訪問許可權 |
RandomAccessFile(File file,String mode) | 引數file給出建立的流的源(流目的地) |
6.2相關方法:
seek(long a) | 定位RandomAccessFile流的讀寫位置 |
getFilePointer() | 獲取流的當前讀寫位置 |
7 .陣列流
7.1位元組陣列流
位元組陣列輸入流ByteArrayInputStream和位元組陣列輸出流ByteArrayOutputStream分別使用位元組陣列作為流的源和目標。
ByteArrayInputStream構造方法及常用方法:
ByteArrayInputStream(byte[] buf) | 位元組陣列流的源是引數buf指定的陣列的全部位元組單元 |
ByteArrayInputStream(byte[] buf,int offset,int length) | 位元組陣列流的源是引數buf指定的陣列從offset處按順序取得length個位元組單元 |
public int read() | 順序地從源中讀出一個位元組 |
public int read(byte[] b,int off,int len) | 順序地從源中讀出引數len指定的位元組數 |
7.2ByteArrayOutputStream流構造方法及常用方法
ByteArrayOutputStream() | 位元組陣列輸出流指向一個預設大小為32位元組的緩衝區 |
ByteArrayOutputStream(int size) | 位元組陣列輸出流指向緩衝區的初始大小由引數size指定 |
public void write(int b) | 順序地向緩衝區寫入一個位元組 |
public void write(byte[] b,int off,int len) | 將引數b中指定的len個位元組順序地寫入緩衝區 |
public byte[] toByteArray() | 返回輸出流寫入到緩衝區的全部位元組 |
7.3字元陣列
CharArrayReader和CharArrayWriter類是字元陣列流,使用字元陣列作為流的源和目標。
8.資料流
DataInputStream和DataOutputStream類建立的物件稱為資料輸入流和資料輸出流。
構造方法:
DataInputStream(InputStream in) | 建立的資料輸入流指向一個由引數in指定的底層輸入流 |
DataOutputStream(OutnputStream out) | 建立的資料輸出流指向一個由引數out指定的底層輸出流 |
9. 物件流
ObjectInputStream和ObjectOutputStream類建立的物件稱為物件輸入流和物件輸出流。
構造方法:
* ObjectInputStream(InputStream in)
* ObjectOutputStream(OutputStream out)
相關方法:
writeObject(Object obj) | 將一個物件obj寫入到一個檔案 |
readObject() | 讀取一個物件到程式中 |
所謂序列化:一個類如果實現了Serializable介面,那麼這個類建立的物件就是所謂序列化的物件。
10 .序列化與物件克隆
如果一個“複製品”實體的變化不會引起原物件實體發生變化,反之亦然。這樣的複製品稱為原物件的一個克隆物件或簡稱克隆。
一個物件呼叫clone()方法就可以獲取該物件的克隆物件。
物件輸入流通過物件的序列化資訊來得到當前物件的一個克隆。
11.使用Scanner解析檔案
使用Scanner類和正則表示式來解析檔案。
1.使用預設分隔標記解析檔案//2.使用正則表示式作為分隔標記解析檔案
建立Scanner物件,並指向要解析的檔案//並使用useDelimiter方法指定正則表示式作為分隔標記,例如:
File file = new File(' hello. java") ;
Scanner sc = new Scanner(file) ;
sc將空白作為分隔標記//sc. useDelimi ter (正則表示式) ;
相關方法 next ()依次返回file中的單詞
hasNext ()判斷file最後一一個單詞是否已被next ()方法返回
12.檔案對話方塊
構造方法JFileChooser()建立初始不可見的有模式的檔案對話方塊。
然後檔案對話方塊呼叫下述2個方法:
showSaveDialog(Component a) | 使得對話方塊可見;引數a指定對話方塊可見時的位置,當a是null時,檔案對話框出現在螢幕的中央;如果元件a不空,檔案對話方塊在元件a的正前面居中顯示 | 提供儲存檔案的介面 |
showOpenDialog(Component a) | 提供開啟檔案的介面 | |
13.帶進度條的輸入流
如果讀取檔案時希望看見檔案的讀取進度可以使用javax.swing包提供的輸入流類:ProgressMonitorInputStream。
構造方法:
ProgressMonitorInputStream(Conmponent c,String s,InputStream);
14.檔案鎖
FileLock、FileChannel類處理Java提供的檔案鎖功能。它們分別在java.nio和java.nio.channels包中。
輸入、輸出流讀寫檔案時可以使用檔案鎖。
RondomAccessFile建立的流在讀寫檔案時使用檔案鎖的步驟如下:
14.1先使用RondomAccessFile流建立指向檔案的流物件,該物件的讀寫屬性必須是rw,例如:
RandomAccessFile input=new RandomAccessFile("Example.java","rw");
14.2input流呼叫方法getChannel()獲得一個連線到地層檔案的FileChannel物件(通道),例如
FileChannel channel=input.getChannel();
14.3通道呼叫tryLock()或lock()方法獲得一個FileLock(檔案鎖)物件,這一過程也稱作對檔案加鎖。
教材學習中的問題和解決過程
輸入輸出流得參照物搞不清楚
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
目標 | 5000行 | 20篇 | 400小時 | 會用java語言獨立設計程式 |
第一週 | 13/13 | 1/1 | 5/5 | 學會使用jdk以及對java源程式語句的基本注意事項有所瞭解 |
第二週 | 140/143 | 1/2 | 10/15 | 學會java基本資料型別與陣列和c語言/c++在表達和用法上的相同/不同之處 |
第三週 | 276/419 | 1/3 | 20/35 | java中運算子,表示式和語句的表現形式,類的宣告,定義方法 |
第四周 | 600/1019 | 1/4 | 30/45 | 類和物件 |
第五週 | 150/1169 |
1/5 | 10/55 | 繼承的作用,子類和父類的繼承性,子類繼承父類後方法的訪問許可權以及各種操作 |
第六週 | 100/1269 | 1/6 | 8/63 | 介面定義、使用方法和作用 |
第七週 | 100/1369 | 1/7 | 9/72 | 內部類(獨有)包含匿名類和異常類(檢測)的使用方法和作用 |
第八週 | 150/1869 | 1/8 | 10/82 | java常用實用類和方法 |
第九周 | 100/1969 | 1/9 | 20/102 | 元件、容器、視窗、(如何處理事件:事件源,監視器、介面) |
第十週 | 80/2049 | 1/10 | 10/112 | 輸入輸出流和各種流的作用、構造方法 |
參考文獻
《java2實用教程(第5版)》