文件 the java tutorials 是很好的学习资源,本文练习了里面关于Exception练习的第四题,即:
Add a
readList method to . 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
victor; private static final int SIZE = 10; public ListOfNumbers2() { victor = new Vector
(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(); }}