Java 流(Stream)、文件(File)和IO
java.io 包幾乎包含了所有操作輸入、輸出需要的類(lèi)。所有這些流類(lèi)代表了輸入源和輸出目標(biāo)。
Java.io 包中的流支持很多種格式,比如:基本類(lèi)型、對(duì)象、本地化字符集等等。
一個(gè)流可以理解為一個(gè)數(shù)據(jù)的序列。輸入流表示從一個(gè)源讀取數(shù)據(jù),輸出流表示向一個(gè)目標(biāo)寫(xiě)數(shù)據(jù)。
讀取控制臺(tái)輸入
//使用 BufferedReader 在控制臺(tái)讀取字符
import java.io.*;
public class BRRead {
public static void main(String[] args) throws IOException {
char c;
// 使用 System.in 創(chuàng)建 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("輸入字符, 按下 'q' 鍵退出。");
// 讀取字符
do {
c = (char) br.read();
System.out.println(c);
} while (c != 'q');
}
}
讀寫(xiě)文件
FileInputStream
該流用于從文件讀取數(shù)據(jù)
InputStream f = new FileInputStream("C:/java/hello");
使用以下方法來(lái)讀取流或者進(jìn)行其他的流操作
public void close() throws IOException{} 關(guān)閉此文件輸入流并釋放與此流有關(guān)的所有系統(tǒng)資源。拋出IOException異常。
protected void finalize()throws IOException {} 這個(gè)方法清除與該文件的連接。確保在不再引用文件輸入流時(shí)調(diào)用其 close 方法。拋出IOException異常。
public int read(int r)throws IOException{} 這個(gè)方法從 InputStream 對(duì)象讀取指定字節(jié)的數(shù)據(jù)。返回為整數(shù)值。返回下一字節(jié)數(shù)據(jù),如果已經(jīng)到結(jié)尾則返回-1。
public int read(byte[] r) throws IOException{}
這個(gè)方法從輸入流讀取r.length長(zhǎng)度的字節(jié)。返回讀取的字節(jié)數(shù)。如果是文件結(jié)尾則返回-1。public int available() throws IOException{} 返回下一次對(duì)此輸入流調(diào)用的方法可以不受阻塞地從此輸入流讀取的字節(jié)數(shù)。返回一個(gè)整數(shù)值。
FileOutputStream
創(chuàng)建一個(gè)文件并向文件中寫(xiě)數(shù)據(jù)。文件不存在,則創(chuàng)建。
OutputStream f = new FileOutputStream("C:/java/hello")
public void close() throws IOException{}
關(guān)閉此文件輸入流并釋放與此流有關(guān)的所有系統(tǒng)資源。拋出IOException異常。protected void finalize()throws IOException {}
這個(gè)方法清除與該文件的連接。確保在不再引用文件輸入流時(shí)調(diào)用其 close 方法。拋出IOException異常。public void write(int w)throws IOException{} 這個(gè)方法把指定的字節(jié)寫(xiě)到輸出流中。
public void write(byte[] w) 把指定數(shù)組中w.length長(zhǎng)度的字節(jié)寫(xiě)到OutputStream中。
文件操作代碼參考
Java目錄
創(chuàng)建目錄:
mkdir()方法創(chuàng)建一個(gè)文件夾,成功則返回true,失敗則返回false。失敗表明File對(duì)象指定的路徑已經(jīng)存在,或者由于整個(gè)路徑還不存在,該文件夾不能被創(chuàng)建。
mkdirs()方法創(chuàng)建一個(gè)文件夾和它的所有父文件夾。
讀取目錄
一個(gè)目錄其實(shí)就是一個(gè) File 對(duì)象,它包含其他文件和文件夾。
如果創(chuàng)建一個(gè) File 對(duì)象并且它是一個(gè)目錄,那么調(diào)用 isDirectory() 方法會(huì)返回 true
使用 list() 方法來(lái)檢查一個(gè)文件夾中包含的內(nèi)容:
import java.io.File;
public class DirList {
public static void main(String args[]) {
String dirname = "/tmp";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println("目錄 " + dirname);
String s[] = f1.list();
for (int i = 0; i < s.length; i++) {
File f = new File(dirname + "/" + s[i]);
if (f.isDirectory()) {
System.out.println(s[i] + " 是一個(gè)目錄");
} else {
System.out.println(s[i] + " 是一個(gè)文件");
}
}
} else {
System.out.println(dirname + " 不是一個(gè)目錄");
}
}
}
刪除目錄或文件
刪除文件可以使用 java.io.File.delete() 方法。
當(dāng)刪除某一目錄時(shí),必須保證該目錄下沒(méi)有其他文件才能正確刪除,否則將刪除失敗。
import java.io.File;
public class DeleteFileDemo {
public static void main(String[] args) {
// 這里修改為自己的測(cè)試目錄
File folder = new File("/tmp/java/");
deleteFolder(folder);
}
// 刪除文件及目錄
public static void deleteFolder(File folder) {
File[] files = folder.listFiles();
if (files != null) {
for (File f : files) {
if (f.isDirectory()) {
deleteFolder(f);
} else {
f.delete();
}
}
}
folder.delete();
}
}
Java 異常處理
異常發(fā)生的原因
用戶(hù)輸入了非法數(shù)據(jù)。
要打開(kāi)的文件不存在。
網(wǎng)絡(luò)通信時(shí)連接中斷,或者JVM內(nèi)存溢出。
Java 的非檢查性異常
檢查性異常類(lèi)
異常方法
public String getMessage() 返回關(guān)于發(fā)生的異常的詳細(xì)信息。這個(gè)消息在Throwable
類(lèi)的構(gòu)造函數(shù)中初始化了。public Throwable getCause() 返回一個(gè) Throwable 對(duì)象代表異常原因。
public String toString() 返回此 Throwable 的簡(jiǎn)短描述。
public void printStackTrace() 將此 Throwable 及其回溯打印到標(biāo)準(zhǔn)錯(cuò)誤流。
public StackTraceElement [] getStackTrace()
返回一個(gè)包含堆棧層次的數(shù)組。下標(biāo)為0的元素代表?xiàng)m?,最后一個(gè)元素代表方法調(diào)用堆棧的棧底。public Throwable fillInStackTrace() 用當(dāng)前的調(diào)用棧層次填充Throwable
對(duì)象棧層次,添加到棧層次任何先前信息中。
捕獲異常
使用 try 和 catch 關(guān)鍵字可以捕獲異常。try/catch 代碼塊放在異常可能發(fā)生的地方;
Catch語(yǔ)句包含要捕獲異常類(lèi)型的聲明。當(dāng)保護(hù)代碼塊中發(fā)生一個(gè)異常時(shí),try 后面的 catch 塊就會(huì)被檢查。finally 關(guān)鍵字用來(lái)創(chuàng)建在 try 代碼塊后面執(zhí)行的代碼塊。無(wú)論是否發(fā)生異常,finally 代碼塊中的代碼總會(huì)被執(zhí)行。
try{
// 程序代碼
}catch(異常類(lèi)型1 異常的變量名1){
// 程序代碼
}catch(異常類(lèi)型2 異常的變量名2){
// 程序代碼
}finally{
// 程序代碼
}
throws/throw 關(guān)鍵字
throw 關(guān)鍵字用于在代碼中拋出異常;
throws 關(guān)鍵字用于在方法聲明中指定可能會(huì)拋出的異常類(lèi)型??梢月暶鲯伋龆鄠€(gè)異常;
public void readFile(String filePath) throws IOException,RemoteException,InsufficientFundsException {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
if (line == 0) {
throw new IllegalArgumentException("Number must be positive");
}
}
reader.close();
}
try-with-resources(可查閱詳細(xì)內(nèi)容進(jìn)行了解)
JDK7 之后,Java 新增的 try-with-resource 語(yǔ)法糖來(lái)打開(kāi)資源,并且可以在語(yǔ)句執(zhí)行完畢后確保每個(gè)資源都被自動(dòng)關(guān)閉 。
聲明自定義異常
所有異常都必須是 Throwable 的子類(lèi)。
如果希望寫(xiě)一個(gè)檢查性異常類(lèi),則需要繼承 Exception 類(lèi)。
如果你想寫(xiě)一個(gè)運(yùn)行時(shí)異常類(lèi),那么需要繼承 RuntimeException 類(lèi)。
通用異常
JVM(Java虛擬機(jī)) 異常:由 JVM 拋出的異?;蝈e(cuò)誤。例如:NullPointerException類(lèi),ArrayIndexOutOfBoundsException 類(lèi),ClassCastException 類(lèi)。
程序級(jí)異常:由程序或者API程序拋出的異常。例如 IllegalArgumentException類(lèi),IllegalStateException 類(lèi)。
在這里歡迎大家的點(diǎn)贊、關(guān)注、評(píng)論,以此來(lái)促進(jìn)大家互相學(xué)習(xí)交流,同時(shí)可以讓新加入的小伙伴更快的了解新知識(shí)??!!
以上內(nèi)容如有侵權(quán),請(qǐng)聯(lián)系作者進(jìn)行刪除文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-681698.html
≧???≦ 1分2分都是愛(ài),感謝已經(jīng)打賞的老板,和正在打賞的老板們 ≧???≦文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-681698.html
到了這里,關(guān)于Java eight 解讀流(Stream)、文件(File)、IO和異常處理的使用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!