一、IO流
1.1 IO流的概述
IO流是對設備之間傳輸數據的抽象,java通過IO流對數據進行各種各樣的操作,而對數據進行操作的"對象"都在IO包里。
1.2 IO流的分類
a.按照數據流向
輸入流
讀入數據
輸出流
寫出數據
b.按照數據類型
字節流
Java中的字節流處理的最基本單位為單個字節
字符流
Java中的字符流處理的最基本的單元是字符
1.3 IO流基類概述和FileOutputStream的構造方法
字節流的抽象基類:
InputStream
OutputStream
字符流的抽象基類:
Reader
Writer
注:由這四個類派生出來的子類的名稱是使用該四個類類名作為后綴。
1.4 OutputStream基類的常用字類
FileOutputStream
OutputStream
ByteArrayOutputStream
二.FileOutputStream類
2.1 FileOutputStream類的構造方法
FileOutputStream(File file)
創建一個指向----File類對象表示的文件----的寫入數據的輸出流
FileOutputStream(String name)
創建一個----字符串表示的文件----的寫入數據的輸出流
注意事項:
i: 創建字節輸出流對象了做了幾件事情?(如a.txt)
調用系統資源創建a.txt對象
創建fos對象
將fos對象指向這個文件
ii:調用close()方法的作用
通知系統釋放關于a.txt的資源
讓IO流對象變成垃圾,等待垃圾回收器對其回收。
2.2 FileOutputStream的三個write()方法
public void write(int b)
將指定字節寫入此文件輸出流
public void write(byte[] b)
將字節數組寫入此文件輸出流
public void write(byte[] b,int off,int len)
將字節數組的一部分寫入此文件輸出流
注意:文件的編碼格式一定要一致,否則會出現亂碼的情況。
2.3 FileOutputStream寫出數據實現換行和追加寫入
換行
windows
\r\n
Linux
\n
Mac
\r
數據的追加寫入
FileOutputStream(File file, boolen append)
傳入的第二個參數為true即可
2.4 FileOutputStream寫出數據加入異常處理
注意:文件輸入流是否打開,如果未打開,就不用進行關閉,否則會出錯。
public class File_class {
public static void main(String[] args) {
FileOutputStream f = null;
try {
f = new FileOutputStream("a.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
f.write(new byte[]{'q', 'w', 'e', 'r'});
} catch (IOException e) {
e.printStackTrace();
} finally {
{
if(f!=null) {
try {
f.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
三.FileInputStream類
3.1 FileStream類讀取數據
一次讀取一個字節
//讀取內容需要將int類型的字節強制轉換成char類型進行輸出。
public class read1 {
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("a");
int len = 0;
while((len = in.read()) != -1) {
System.out.print((char)len);
}
in.close();
}
}
一次讀取一個字節數組
注意:String導包出錯也會出錯。
public class read1 {
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("a");
int len = 0;
byte[] bytes = new byte[1024];
while((len = in.read(bytes)) != -1) {
System.out.println(new String(bytes));
}
in.close();
}
}
四.BufferedOutputStream高效輸出流
4.1 緩沖區
概念
指內存中預留的指定大小(size)的存儲空間(對I/O流的數據作臨時存儲)。
作用
1.減少實際物理讀寫次數
2.緩沖區在創建時就被分配內存,這塊內存區域一直被重用,可以減少動態分配和回收內存的次數。
4.2 BufferedOutputStream構造方法
BufferedOutputStream(OutputStream out)
創建一個新的緩沖輸出流,以將數據寫入新的底層輸出流。
BufferedOutputStream(OutputStream out, int size)
創建一個新的緩沖輸出流,以將具有定緩沖區大小的數據寫入到底層輸出流。
5.案例
5.1將指定目錄下的以".txt"結尾的文件的名字輸出到屏幕上
注:用接口FilenameFilter完成
基本思想:
1.獲得文件列表
2.便利文件列表,是文件,判斷是不是符合要求的文件。
3.是文件夾,進入第一步,進行遞歸
public class FIlefind {
public static void main(String[] args) {
File file = new File("C:\\Drcom");
find(file);
}
private static void find(File file) {
File[] f = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File newFile = new File(dir, name);
if (newFile.isFile() && name.endsWith(".txt")) {
return true;
} else if (newFile.isDirectory()) {
find(newFile); //遞歸開始
return false;
} else
return false;
}
});
for(File file2 : f) {
System.out.println(file2.getName());
}
}
}
解析
FileNameFilter接口的access()方法在本程序中的作用是判斷FIle類對象是不是文件,并且是不是以".txt"為后綴的文件,如果是,將符合要求的文件放入到File[] f這個FIle對象數組里,調用本身方法那里是遞歸開始,如果File對象是文件夾,將該對象作為參數,傳入到find()方法里,再獲得該文件夾里面的資源列表再進行判斷是不是文件或者文件夾…遞歸到最里層,符合的文件名輸出,退一層,輸出,直到回到遞歸入口。
注意事項:
在遞歸入口下面要reuturn false,因為方法是boolean類型返回值,不然會出錯,記住只有符合條件的文件對象那個return true就會好理解多。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。