文件 the java tutorials 是很好的学习资源,本文练习了里面关于Exception练习的第四题,即:
Add a readList method to ListOfNumbers.java. This method should read in int values from a file, print each value, and append them to the end of the vector. You should catch all appropriate errors. You will also need a text file containing numbers to read in.
文件的非RuntimeException需要用try{} catch{}语句来捕捉,或者用throws抛出方法中的异常,等待使用该方法的调用捕捉此次异常。
import java.io.*;
import java.util.Iterator;
import java.util.Vector;
public class ListOfMembers {
    private Vector<Integer> victor= new Vector<Integer>(SIZE);//vector创建
    private static final int SIZE = 10;
    public ListOfMembers () {
    
        for (int i = 0; i < SIZE; i++)
            victor.addElement(new Integer(i+1));//vector赋值
        
    }
    public void readList(String fileName) throws IOException{
     File ft=null;//局部变量必须初始化;
     LineNumberReader fi=null;
     FileReader ff=null;
     try{
      ft= new File(fileName);//文件创建
      ff=new FileReader(ft);
      
     }catch(NullPointerException e){
     e.printStackTrace(); 
     }
     fi=new LineNumberReader(ff);//按行读取文件内容
  String buffer=new String();
  String[] i=null;
//System.out.println("[(int) f.length()];"+(int) fi.length());
  while((buffer=fi.readLine())!=null){
   i=buffer.split(" \\s");//将每一行的数据用空格隔开。
   for(int j=0;j<i.length;j++)
   {
    int Num=Integer.parseInt(i[j]);
    System.out.println(Num);
    victor.addElement(new Integer(Num));//将数据添加到vector中,这样vector容量自动扩展
   }
  }
  fi.close();
  
  
    }
    public void writeList() {
        PrintWriter out = null;
         for(Iterator iter=victor.iterator();iter.hasNext();)
         System.out.println(iter.next());
        try {
            System.out.println("Entering try statement");
            out = new PrintWriter(new FileWriter("c:\\OutFile.txt"));//将数据写入输出文件中。
        
            for (int i = 0; i < victor.size(); i++)
                out.println("Value at: " + i + " = " + victor.elementAt(i));
        } catch (ArrayIndexOutOfBoundsException e) {
            System.err.println("Caught ArrayIndexOutOfBoundsException: " +
                                 e.getMessage());
        } catch (IOException e) {
            System.err.println("Caught IOException: " + e.getMessage());
        } finally {
            if (out != null) {
                System.out.println("Closing PrintWriter");
                out.close();
            } else {
                System.out.println("PrintWriter not open");
            }
        }
    }
    public static void main(String[] args){
     
     ListOfMembers lom=new ListOfMembers();
     String pathName="c:\\a.txt";
     try {
   lom.readList(pathName);
     
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  lom.writeList();
    // lom.writeList();
    }
}
参考答案如下,参考答案使用了RandomAccessFile 方法,过程更加的简洁,方便。具体的RandomAccessFile方法请参见: java.io.RandomAccessFile。
/*
 * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Oracle or the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 
import java.io.*;
import java.util.Vector;
public class ListOfNumbers2 {
    private Vector<Integer> victor;
    private static final int SIZE = 10;
    public ListOfNumbers2() {
        victor = new Vector<Integer>(SIZE);
        for (int i = 0; i < SIZE; i++)
            victor.addElement(new Integer(i));
        this.readList("infile.txt");
        this.writeList();
    }
    public void readList(String fileName) {
        String line = null;
        try {
            RandomAccessFile raf = new RandomAccessFile(fileName, "r");
            while ((line = raf.readLine()) != null) {
                Integer i = new Integer(Integer.parseInt(line));
                System.out.println(i);
                victor.addElement(i);
            }
        } catch(FileNotFoundException fnf) {
            System.err.println("File: " + fileName + " not found.");
        } catch (IOException io) {
            System.err.println(io.toString());
        }
    }
    public void writeList() {
        PrintWriter out = null;
        try {
            out = new PrintWriter(new FileWriter("outfile.txt"));
        
            for (int i = 0; i < victor.size(); i++)
                out.println("Value at: " + i + " = " + victor.elementAt(i));
        } catch (ArrayIndexOutOfBoundsException e) {
            System.err.println("Caught ArrayIndexOutOfBoundsException: " +
                                 e.getMessage());
        } catch (IOException e) {
            System.err.println("Caught IOException: " + e.getMessage());
        } finally {
            if (out != null) {
                System.out.println("Closing PrintWriter");
                out.close();
            } else {
                System.out.println("PrintWriter not open");
            }
        }
    }
    public static void main(String[] args) {
        new ListOfNumbers2();
    }
}