第12周預習作業
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));//打印數組內容
package twentyth;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class Six {
/*public static void main(String[] args) {
byte[] content = null;
Scanner sc=new Scanner(System.in);
FileInputStream fis=null;
while(sc.hasNext()) {
String str=sc.next();
try {
fis = new FileInputStream(str);
int bytesAvailabe = fis.available();//獲得該文件可用的字節數
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//創建可容納文件大小的數組
fis.read(content);//將文件內容讀入數組
}
System.out.println(Arrays.toString(content));//打印數組內容
} catch (Exception e) {
if(e instanceof FileNotFoundException) {
System.out.println("找不到文件"+str+",請重新輸入文件名");
}
else {
System.out.println("打開或讀取文件失敗!");
break;
}
}finally {
if(fis!=null){
try{
fis.close();
System.out.println("關閉文件ing");
}catch(NullPointerException e){//判斷是否是空指針異常
System.out.println(e);
}
}
}
} */
public static void main(String[] args) throws IOException{
byte[] content = null;
try(FileInputStream fis = new FileInputStream("testfis.txt")){//在try的圓括號中寫入將要關閉資源的對象
int bytesAvailabe = fis.available();//獲得該文件可用的字節數
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//創建可容納文件大小的數組
fis.read(content);//將文件內容讀入數組
}
}catch(Exception e){
System.out.println(e);
}
System.out.println(Arrays.toString(content));//打印數組內容
}
}
6.1 改正代碼,並增加如下功能。當找不到文件時,需提示用戶找不到文件xxx,請重新輸入文件名
,然後嘗試重新打開。 如果是其他異常則提示打開或讀取文件失敗!
。
註1:裏面有多個方法均可能拋出異常。
功能2:需要添加finally
關閉文件。無論上面的代碼是否產生異常,總要提示關閉文件ing
。如果關閉文件失敗,提示關閉文件失敗!
6.2 結合題集6-2
代碼,要將什麽樣操作放在finally塊?為什麽?使用finally關閉資源需要註意一些什麽?
try{}catch{}放入finally中,因為關閉文件可能存在異常。
6.3 使用Java7中的try-with-resources
來改寫上述代碼實現自動關閉資源。簡述這種方法有何好處?
嘗試自動關閉資源的對象生成寫在try之後的圓括號中,無需判斷是否為null,也避免了在關閉時產生的其它異常,使整個代碼更簡潔。
第12周預習作業