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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© justin1258 中级黑马   /  2014-8-9 12:58  /  1541 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 justin1258 于 2014-8-11 13:00 编辑

看下面的代码:
  1. public class FilePathTest {
  2.         public static void main(String... args) throws Exception{
  3.                 System.getProperties().setProperty("user.dir", "C:");//貌似文件的绝对路径是根据user.dir这个设置来决定的
  4.                
  5.                 File file = new File("test.txt");
  6.                 System.out.println("absolutePath: " + file.getAbsolutePath());
  7.                 InputStream inputStream = new FileInputStream(file);
  8.                 System.out.println("inputStream == null ? " + (inputStream == null));
  9.         }
  10. }/*output:
  11. absolutePath: C:\test.txt
  12. inputStream == null ? false
  13. *///~
复制代码
代码里我指定的test.txt文件是在我工程的根目录下:
C:\Users\justin\Workspaces\MyEclipse 2015 CI\javaenhance\test.txt
当我改变了user.dir这个系统参数后,从运行结果可知,文件的绝对路径发生了变化。
可是在初始化FileInputStream的时候并没有报FileNotException异常。
这是为什么???


15 个回复

正序浏览
justin1258 发表于 2014-8-10 00:09
我的工程目录下有这个文件,要是把它删掉就会报错,不删就是上面的运行结果,尽管不应该去工程目录下找, ...

是不是MyEclipse的搜索路径设定比较特殊?你命令行用javac手动编译试试
回复 使用道具 举报
fantacyleo 发表于 2014-8-9 20:28
是的,不会到工程目录下找,会到你新指定的working dir下找,所以我运行时就报异常了。你能正常运行是怎 ...

我的工程目录下有这个文件,要是把它删掉就会报错,不删就是上面的运行结果,尽管不应该去工程目录下找,,,但是但是,我也搞不清这是为什么...问题就在这里。
回复 使用道具 举报
justin1258 发表于 2014-8-9 19:59
需要在工程根目录下有这个文件,否则会报错。但是显示的结果是文件根本不是工程根目录下的,他怎么会去工 ...

是的,不会到工程目录下找,会到你新指定的working dir下找,所以我运行时就报异常了。你能正常运行是怎么回事呢?
回复 使用道具 举报
fantacyleo 发表于 2014-8-9 17:18
MyEclipse都出到2015了啊。。。话说我运行你这段代码,抛异常了。楼上的解释比较靠谱 ...

需要在工程根目录下有这个文件,否则会报错。但是显示的结果是文件根本不是工程根目录下的,他怎么会去工程目录下找。这是我感觉疑问的。。
回复 使用道具 举报
icris 发表于 2014-8-9 17:06
absolutePath: ~/test.txt
Exception in thread "main" java.io.FileNotFoundException: test.txt (没有那 ...

需要在工程根目录下有这个文件,否则会报错。但是显示的结果是文件根本不是工程根目录下的,他怎么会去工程目录下找。这是我感觉疑问的。。
回复 使用道具 举报
曾宇 发表于 2014-8-9 17:00
因为, File file = new File("test.txt");
在你改变路径之后,在C盘下重新创建了一个test.txt文件。 ...

File file = new File("test.txt");
这句话并不能创建一个文件的貌似。你可以试一下。。
回复 使用道具 举报
F@C 中级黑马 2014-8-9 18:40:37
9#
进来学习
回复 使用道具 举报
本帖最后由 fantacyleo 于 2014-8-9 17:20 编辑

MyEclipse都出到2015了啊。。。话说我运行你这段代码,抛异常了。楼上的解释比较靠谱
回复 使用道具 举报
absolutePath: ~/test.txt
Exception in thread "main" java.io.FileNotFoundException: test.txt (没有那个文件或目录)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:131)
        at st.one.Tsasa.main(Tsasa.java:14)
可能说明你有 C:\test.txt 吧
回复 使用道具 举报
因为, File file = new File("test.txt");
在你改变路径之后,在C盘下重新创建了一个test.txt文件。
回复 使用道具 举报
陶圣虎 发表于 2014-8-9 13:06
看不明白改变系统属性 跟读取文件有什么关系

文件的绝对路径是根据系统参数user.dir来的。

点评

是相对路径。user.dir是working dir,不影响绝对路径的  发表于 2014-8-9 17:19
回复 使用道具 举报
justin1258 发表于 2014-8-9 13:01
刚才失误,现在好了

看不明白改变系统属性 跟读取文件有什么关系
回复 使用道具 举报
陶圣虎 发表于 2014-8-9 12:59
看不到你看不到你

刚才失误,现在好了
回复 使用道具 举报
看不到你看不到你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马