package cn.itcast.IoTest;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;public class IOTest {

public static void main(String[] args) {
try {
FileReader fin = new FileReader("test.txt");
int ch;
while((ch=fin.read())!=-1)
{
System.out.println(ch);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }}
运行之后报错为:
Exception in thread "main" java.io.FileNotFoundException: test1.txt (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at cn.itcast.IoTest.IOTest1.main(IOTest1.java:10)
1.请问为什么没有打出异常栈信息,即e.printStackTrace();为什么没作用,效果和直接抛出异常不进行处理是一样的
2.test1.txt是应该放在这个包中跟java源文件在同一目录下吗?为什么我放在哪都是一样的错误!

解决方案 »

  1.   

    你多写了一个
     catch (IOException e) {
                e.printStackTrace();
            }
      

  2.   

    不是放哪的问题 而是写的路径的问题
    写全实际路径
    例 d://text1.txt
      

  3.   

    FileReader fin = new FileReader("test.txt");
    写绝对路径试试
      

  4.   

    test.txt放项目路径下,跟src并列
      

  5.   

    test.txt要相对与这个class文件的位置是他的相对位置,可以写绝对路径D:\test.txt
      

  6.   

    绝对路径:
    d:/test.txt
    或者
    d:\\test.txt
      

  7.   

    1. 不明白,为什么没有打印;e.printStackTrace()就是给System.err,就是标准的错误流;如果直接抛出异常的话,就是由调用main方法的对象处理;2. test1.txt放在这个包中跟java源文件在同一目录下,这样应该指定绝对路劲;
    如果不是,应该放到你应用的根目录(如果是eclipse建立的Java project,就是project名下);
    最好是放在IOTest.class目录中,就是包中,然后改成这样:
    FileReader fin = new FileReader(IOTest.class.getResource("").getPath()+"/test.txt");