文件 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;
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();
}
}
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(); } }
转载于:https://blog.51cto.com/weiweiwalking/1141176