文件 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 Vectorvictor; 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(); }}