6. 為如下代碼加上異常處理
byte[] content = null;
FileInputStream fis = new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//獲得該文件可用的字節數
if(bytesAvailabe>0){content = new byte[bytesAvailabe];//創建可容納文件大小的數組fis.read(content);//將文件內容讀入數組
}
System.out.println(Arrays.toString(content));//打印數組內容
6.1 改正代碼,并增加如下功能。當找不到文件時,需提示用戶找不到文件xxx,請重新輸入文件名,然后嘗試重新打開。 如果是其他異常則提示打開或讀取文件失敗!。
注1:里面有多個方法均可能拋出異常。
功能2:需要添加finally關閉文件。無論上面的代碼是否產生異常,總要提示關閉文件ing。如果關閉文件失敗,提示關閉文件失敗!
代碼改造:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {@SuppressWarnings("resource")Scanner sc = new Scanner(System.in);byte[] content = null;FileInputStream fis = null;while (true) {String file = sc.next();try {fis = new FileInputStream(file);int bytesAvailabe = fis.available();// 獲得該文件可用的字節數if (bytesAvailabe > 0) {content = new byte[bytesAvailabe];// 創建可容納文件大小的數組fis.read(content);// 將文件內容讀入數組}System.out.println(Arrays.toString(content));// 打印數組內容} catch (FileNotFoundException e) {System.out.println("找不到文件 " + file + ",請重新輸入文件名");} catch (Exception e) {System.out.println("打開或讀取文件失敗!");} finally {try {System.out.println("關閉文件ing");fis.close();} catch (Exception e) {System.out.println("關閉文件失敗!");}}}}
}
6.2 結合題集6-2代碼,要將什么樣操作放在finally塊?為什么?使用finally關閉資源需要注意一些什么?
將始終需要執行的代碼放在finally塊中。因為不論是否發生異常,finally塊中的代碼都會被執行。使用finally塊關閉資源時也有可能發生異常,要對其作try-catch捕獲處理。
6.3 使用Java7中的try-with-resources來改寫上述代碼實現自動關閉資源。簡述這種方法有何好處?
使用try-with-resources改寫后:
byte[] content = null;
try(FileInputStream fis = new FileInputStream("testfis.txt")){int bytesAvailabe = fis.available();//獲得該文件可用的字節數if(bytesAvailabe>0){content = new byte[bytesAvailabe];//創建可容納文件大小的數組fis.read(content);//將文件內容讀入數組}
}catch(Exception e){e.printStackTrace();
}System.out.println(Arrays.toString(content));
好處:簡化代碼,在try語句塊執行結束后,自動調用close()函數,自動關閉資源。
7. 讀取文件并組裝對象(文件ReadFileUsingScanner.java)
7.1 給出關鍵代碼(需出現你的學號)。額外要求:捕獲異常時,將錯誤的信息按照出錯原因:行號:該行內容格式輸出。
關鍵代碼
import java.io.File;
import java.io.FileNotFoundException;
import java.util.NoSuchElementException;
import java.util.Scanner;public class ReadFileUsingScanner {public static <User> void main(String[] args) throws FileNotFoundException {Scanner in = new Scanner(new File("身份證號.txt"));//為myfile.txt這個File創建一個掃描器inint n = in.nextInt();while (in.hasNextLine()) {String line = in.nextLine();// 讀出myfile.txt的下一行n++;@SuppressWarnings("resource")Scanner lineScanner = new Scanner(line);// 為每一行建立一個掃描器 lineScanner.useDelimiter(" ");// 使用空格作為分隔符 try {String name = lineScanner.next();// 姓名String id = lineScanner.next();// 身份證號String gender = lineScanner.next();// 性別String age = lineScanner.next();// 年齡String address = lineScanner.next();// 地址while (lineScanner.hasNext()) {// 謹防地址只有一段address += lineScanner.next();}System.out.println(name+id+gender+age+address);} catch (NoSuchElementException e) {System.out.println("錯誤原因:"+ e + "行號:"+n+"該行內容為:" + line);}}in.close();}
}