部落格作業-異常
阿新 • • 發佈:2018-11-19
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。如果關閉檔案失敗,提示關閉檔案失敗!
6.2 結合題集6-2程式碼,要將什麼樣操作放在finally塊?為什麼?使用finally關閉資源需要注意一些什麼?
將必須要執行的操作放在finally塊,因為finally塊中程式碼一定會執行,注意要進行try catch,因為關閉資源時可能出現異常。
6.3 使用Java7中的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) { System.out.println(e); } System.out.println(Arrays.toString(content));//列印陣列內容
好處:生成程式碼更加簡潔,try-with-resources語句在編寫必須關閉資源的程式碼時會更容易。
7. 讀取檔案並組裝物件
實驗任務書中中的題目3:讀取檔案並組裝物件
7.1 給出關鍵程式碼(需出現你的學號)。額外要求:捕獲異常時,將錯誤的資訊按照出錯原因:行號:該行內容格式輸出。
public class ReadFileUsingScanner201721123093 {
private static Scanner in;
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
int count=0;
Scanner in = new Scanner(new File("身份證號.txt"));//為myfile.txt這個File建立一個掃描器in
while(in.hasNextLine()){
String line = in.nextLine();//讀出myfile.txt的下一行
count++;
Scanner lineScanner = new Scanner(line);//為每一行建立一個掃描器
lineScanner.useDelimiter(" ");//使用空格作為分隔符
try{
String a1 = lineScanner.next();//姓名
String a2 = lineScanner.next();//身份證號
String a3 = lineScanner.next();//性別
String a4 = lineScanner.next();//年齡
String a5 = lineScanner.next();//地址
while(lineScanner.hasNext()){//謹防地址只有一段
a5 += lineScanner.next();
}
System.out.println(a1+a2+a3+a4+a5);
try {
if (a1.length()==0)
throw new Exception("請填寫姓名,姓名為空");
if (a2.length()==0)
throw new Exception("請填寫身份證號,身份證號為空");
if (a2.length()!=18) {
throw new Exception("身份證號格式錯誤");
}
if (a3.length()==0)
throw new Exception("您的性別未填寫");
if (!a3.equals("男") && !a3.equals("女"))
throw new Exception("性別格式錯誤");
if (a4.length()==0)
throw new Exception("您的年齡未填寫");
if (a5.length()==0)
throw new Exception("您的地址未填寫");
} catch (Exception e) {
System.out.println(e+":"+count+":"+line);
}
}catch(Exception e){
System.out.println(e+":"+count+":"+line);
}
}
}catch(FileNotFoundException e){
System.out.println(e);
}finally{
if(in!=null){
try{
in.close();
}catch(Exception e){
System.out.println(e);
}
}
}
}
}