目錄
一、Stream流
簡介
分類
二、File類
概述
常用方法
代碼詳解
三、位元組流
概述
檔案輸出流
檔案輸入流
位元組緩沖流
四、字符流
概述
轉換流
字符緩沖流
一、Stream流
簡介
學習下面的知識前,我們先來了解下,什么是流?
流的概念:抽象概念,是對資料傳輸的總稱,資料在設備間的傳輸稱為流,流的本質是資料傳輸,
I/O流就是用來處理設備間傳輸問題的,

分類
按資料流向劃分:輸入流和輸出流
按資料型別劃分:

二、File類
概述
封裝一個磁盤路徑字串,對這個路徑可以執行操作,可以封裝檔案路徑、檔案夾路徑、不存在的路徑,
常用方法

代碼詳解
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 通過將給定的路徑名字串轉換為抽象路徑名來創建新的 File實體
File file = new File("E:\\根路徑\\路徑2");
// 從父路徑名字串和子路徑名字串創建新的File實體
File file1 = new File("E:\\根路徑","路徑2\\test");
// 從父抽象路徑名和子路徑名字串創建新的File實體
File file2 = new File(file1,"路徑2\\test");
// 當具有該名稱的檔案不存在時,創建一個由該抽象路徑名命名的新空檔案
File f = new File("E:\\根路徑\\路徑2\\test\\hello.txt");
// exists() 測驗此抽象路徑名表示的File是否為檔案
if(!f.exists()){
f.createNewFile();
}
// mkdir() 創建由此抽象路徑名命名的目錄
// mkdirs() 創建由此抽象路徑名命名的目錄,包括任何必需但不存在的父目錄
File f1 = new File("E:\\根路徑\\路徑2\\test1");
f1.mkdir();
System.out.println("----------------------------");
// getAbsolutePath() 回傳此抽象路徑名的絕對路徑名字串
System.out.println(f1.getAbsoluteFile());
System.out.println("----------------------------");
// getPath() 將此抽象路徑名轉換為路徑名字串
System.out.println(f1.getPath());
System.out.println("----------------------------");
//getName() 回傳由此抽象路徑名表示的檔案或目錄的名稱
System.out.println(f1.getName());
System.out.println("----------------------------");
// list() 回傳此抽象路徑名表示的目錄中的檔案和目錄的名稱字串陣列
for (String s: file.list()){
System.out.println(s);
}
System.out.println("----------------------------");
// listFiles() 回傳此抽象路徑名表示的目錄中的檔案和目錄的File物件陣列
for (File f0 : file.listFiles()){
System.out.println(f0);
}
System.out.println("----------------------------");
// isFile() 測驗此抽象路徑名表示的File是否為檔案
// isDirectory() 測驗此抽象路徑名表示的File是否為目錄
System.out.println(file1.isDirectory());
System.out.println(file1.isFile());
System.out.println("----------------------------");
}
}
這里留一個思考,如何獲取一個檔案夾下所有檔案的絕對路徑(包括子檔案夾下的檔案)?
提示:遞回遍歷
代碼參考
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路徑\\路徑1");
getAllFile(file);
}
public static void getAllFile(File file){
File[] files = file.listFiles();
for (File f : files){
if(f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f.getAbsolutePath());
}
}
}
}
運行結果:

三、位元組流
概述
位元組流是由位元組組成的,Java里字符由兩個位元組組成.位元組流是基本流,主要用在處理二進制資料,所以位元組流是比較常用的,可以可以處理多種不同種類的檔案,比如文本檔案/音頻/視頻等等,
檔案輸出流
OutputStream抽象類,表示所有位元組輸出流的超類,
常用方法
FileOutputStream子類,直接寫入檔案資料
FileOutStream(String name)創建檔案輸出流以指定的名稱寫入檔案,
FileOutStream(String name,boolean b)追加寫入,
代碼部分
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路徑\\路徑1\\資源檔案1\\檔案1.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(48);
byte[] bys = new byte[]{65, 66,67,68,69,70};
fos.write(bys);
fos.write(bys,2,3);
fos.close();
}
}
運行結果:
![]()
檔案輸入流

FileInputStream子類,直接讀取檔案資料
FileInputStream(String name)創建檔案輸入流以指定的名稱讀取檔案,
代碼部分
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路徑\\路徑1\\資源檔案1\\檔案1.txt");
FileInputStream fis = new FileInputStream(file);
int i;
while ((i=fis.read())!=-1){
System.out.print((char)i + " ");
}
}
}
運行結果:

位元組緩沖流
BufferedOutputSream 位元組緩沖輸出流,
實作緩沖輸出流,可以向底層輸出流寫入資料,而不必為寫入的每個位元組導致系統的呼叫,
構造方法
BufferedOutputSream(OutputStream out)
BufferedOutputSream(OutputStream out,int size)
BufferedInputSream 位元組緩沖輸入流
將創建一個內部緩沖陣列,當從流中讀取或者跳過位元組時,內部緩沖區將根據需要從所包含的輸入流中重新填充,一次很多位元組
構造方法
BufferedInputSream(InputStream in)
BufferedInputSream(InputStream in,int size)
代碼部分
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路徑\\路徑1\\資源檔案1\\檔案1.txt");
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bos.write(48);
bos.close();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int i;
while ((i=bis.read())!=-1){
System.out.println((char)i);
}
}
}
運行結果:

四、字符流
概述
組成:位元組流 + 編碼表,
編碼表
ASCLL
GBXXX字符集
Unicode
采用任何規則編碼,解碼時也必須是對應的規則,否則會出現亂碼
編碼
byte[] getBytes() 使用平臺默認規則編碼
byte[] getBytes(String charsetName) 使用指定規則編碼
解碼
String(byte[] bytes) 使用平臺默認規則解碼
String(byte[] bytes,String charsetName) 使用指定規則解碼
轉換流
字符流抽象基類
Reader
Writer
轉換流
InputStreamReader( FileInputStream fis );
OutputStreamWriter( FileOutputStream fos );
簡化版
FileReader
FileWriter
寫資料的方式
(根據引數不同)
讀資料的方式
read() 一次讀一個字符資料
read(char[] c) 一次讀一個字符陣列資料
代碼部分
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路徑\\路徑1\\資源檔案1\\檔案1.txt");
File file1 = new File("E:\\根路徑\\路徑1\\資源檔案1\\檔案2.txt");
// 轉換流
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file));
osw.write("我愛Java");
osw.close();
InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
int s ;
while ((s=isr.read())!=-1){
System.out.print((char)s);
}
isr.close();
System.out.println();
// 簡化版
FileWriter fw = new FileWriter(file1);
fw.write("我愛Java");
fw.close();
FileReader fr = new FileReader(file1);
int i;
while ((i = fr.read())!=-1){
System.out.print((char)i);
}
}
}
運行結果:

字符緩沖流
BufferedReader
從文本輸入流讀取文本,緩沖字符,以提供字符,陣列和行的高效讀取,可以指定緩沖區大小,或者可以接受默認的大小,默認值足夠大,可用于大多數用途.
BufferedWrite
將文本寫入字符輸出流,緩沖字符,以提供單個字符陣列和字串的高效寫入,可以指定緩沖區大小,或者可以接受默認的大小,默認值足夠大,可用于大多數用途.
特有功能
newLine 寫一行行分隔符,行分隔符由系統定義屬性
readLine() 讀一行文字,結果包含行的內容的字串,不包括任何行終止符,如果流的結尾已經到達,則回傳null.
代碼部分
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路徑\\路徑1\\資源檔案1\\檔案1.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write("我非常喜歡Java");
writer.newLine();
writer.write("我也非常喜歡Java");
writer.close();
BufferedReader reader = new BufferedReader(new FileReader(file));
String s;
while ((s=reader.readLine())!=null){
System.out.println(s);
}
}
}
運行結果:

這次的分享就暫時到這里,如有錯誤的地方請多多指出,謝謝您的閱讀,
??????? ??????? 
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/356971.html
標籤:java
上一篇:Java <集合> 萬字保姆級
