A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹宇 中级黑马   /  2013-6-13 14:04  /  2427 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹宇 于 2013-6-13 22:36 编辑

我创建一个文件对象 用的当前路径下的 Test1.java
当前路径下 有这个文件 可是程序一运行就报出未发现文件异常
我在CMD下面编译运行都可以
就是用Eclipse运行就提示异常 这是为什么?


求教
代码如下:
  1. /*
  2. * 需求:7、 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装
  3. * 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。
  4. *
  5. * */

  6. package com.itheima;

  7. import java.io.BufferedReader;
  8. import java.io.File;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileReader;
  11. import java.io.IOException;

  12. public class Test7 {
  13.         public static void main(String args[])
  14.         {
  15.                 File file = null;
  16.                 file = new File("Test1.java");
  17.                 ReaderPackaging rp = new ReaderPackaging(file);
  18.                 System.out.print(rp.readFile());
  19.                
  20.         }
  21.         

  22. }

  23. class ReaderPackaging
  24. {
  25.         File file;

  26.         //构造函数,传入被操作的文件
  27.         ReaderPackaging(File file)
  28.         {
  29.                 this.file = file;
  30.         }
  31.         
  32.         //定义读取流对象
  33.         BufferedReader readinfo = null;
  34.         
  35.         //定义行号计数器,默认为1开始
  36.         private int linecount=1;
  37.         
  38.         

  39.         public String readFile()
  40.         {
  41.                 try {
  42.                         //为读取流对象关联
  43.                         readinfo = new BufferedReader(new FileReader(file));
  44.                 } catch (FileNotFoundException e) {
  45.                         e.printStackTrace();
  46.                 }
  47.                 //定义一个字符串容器,用以存放添加行号和冒号后的字符串数据
  48.                 StringBuilder tempbuf = new StringBuilder("");
  49.                
  50.                 //临时存储一行字符串
  51.                 String line = null;
  52.                
  53.                 //调用BufferedReader的readLine方法一次读取一行,存入line(临时存储字符串)中
  54.                 //然后在加上行号和冒号后添加进入字符串容器中
  55.                 try {
  56.                         while((line=readinfo.readLine())!=null)
  57.                         {               
  58.                                 tempbuf.append(linecount+":"+line+"\r\n");
  59.                                 linecount++;
  60.                         }
  61.                 } catch (IOException e) {
  62.                         e.printStackTrace();
  63.                 }
  64.                 //返回带行号和冒号的字符串容器的字符串表现形式
  65.                 return tempbuf.toString();
  66.                
  67.         }
  68.         
  69.         

  70. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 直接用绝对路径!

查看全部评分

8 个回复

倒序浏览
我推测可能的问题:
路径问题,
1、绝对路径
2、相对路径
楼主用的是相对路径,换个文件夹就找不到文件了。
我猜是这样的!

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 他说了,自己用的相对..

查看全部评分

回复 使用道具 举报
mvplee 发表于 2013-6-13 14:19
我推测可能的问题:
路径问题,
1、绝对路径

嗯,就是相对路径.

我代码的java文件和要操作的Test1.java文件都是在一个文件夹之内的阿,这时为啥呢?

我以前写Eclipse代码的时候 也是这样用的 都没错误

是不是因为我调用了另外一个类的一个方法,那个方法接收的是我传入的file  然后 就在中间某个不知道的地方就蛋疼了?
回复 使用道具 举报
我把Test1.java文件换了个位置放
放在了我工程文件夹中 就是 和 src  lib 等文件夹一个目录下 然后就蛋疼的 可以了

可是我想不明白阿  我代码文件的目录不是这个目录阿  
Eclipse是不是 默认的相对路径都是指向工程目录的?


为什么我以前使用的就可以呢?
回复 使用道具 举报
本帖最后由 苑永志 于 2013-6-13 15:21 编辑

在命令行中编译运行是相对于当前目录的,如F:\heima>javac Test.java编译Test.java是相对于路径F:\heima这个路径的,所以你平时测试的时候是在java文件所在目录操作的话就是相对于当前路径,所以无需注明具体路径。

而Eclipse帮助用户进行编译过程,其实也是调用jdk的javac命令进行的,而此时所在路径正是工程所在的文件夹,所以改成file = new File("src/com/itheima/Test1.java");即可

希望能帮助楼主理解。
回复 使用道具 举报
问题已经解决的,请及时更改分类为已解决,方便大家查阅,没有的继续追问
关于提问技巧请看:http://bbs.itheima.com/thread-53229-1-1.html
回复 使用道具 举报
曹宇 中级黑马 2013-6-13 22:36:31
7#
苑永志 发表于 2013-6-13 15:15
在命令行中编译运行是相对于当前目录的,如F:\heima>javac Test.java编译Test.java是相对于路径F:\heima这 ...

非常感谢,我明白了!!
回复 使用道具 举报
曹宇 发表于 2013-6-13 22:36
非常感谢,我明白了!!

甭客气,互相交流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马