黑马程序员技术交流社区

标题: 一个关于文件路径的问题。 [打印本页]

作者: justin1258    时间: 2014-8-9 12:58
标题: 一个关于文件路径的问题。
本帖最后由 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异常。
这是为什么???



作者: 陶圣虎    时间: 2014-8-9 12:59
看不到你看不到你
作者: justin1258    时间: 2014-8-9 13:01
陶圣虎 发表于 2014-8-9 12:59
看不到你看不到你

刚才失误,现在好了
作者: 陶圣虎    时间: 2014-8-9 13:06
justin1258 发表于 2014-8-9 13:01
刚才失误,现在好了

看不明白改变系统属性 跟读取文件有什么关系
作者: justin1258    时间: 2014-8-9 13:11
陶圣虎 发表于 2014-8-9 13:06
看不明白改变系统属性 跟读取文件有什么关系

文件的绝对路径是根据系统参数user.dir来的。
作者: 曾宇    时间: 2014-8-9 17:00
因为, File file = new File("test.txt");
在你改变路径之后,在C盘下重新创建了一个test.txt文件。
作者: icris    时间: 2014-8-9 17:06
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 吧
作者: fantacyleo    时间: 2014-8-9 17:18
本帖最后由 fantacyleo 于 2014-8-9 17:20 编辑

MyEclipse都出到2015了啊。。。话说我运行你这段代码,抛异常了。楼上的解释比较靠谱
作者: F@C    时间: 2014-8-9 18:40
进来学习
作者: justin1258    时间: 2014-8-9 19:36
曾宇 发表于 2014-8-9 17:00
因为, File file = new File("test.txt");
在你改变路径之后,在C盘下重新创建了一个test.txt文件。 ...

File file = new File("test.txt");
这句话并不能创建一个文件的貌似。你可以试一下。。
作者: justin1258    时间: 2014-8-9 19:57
icris 发表于 2014-8-9 17:06
absolutePath: ~/test.txt
Exception in thread "main" java.io.FileNotFoundException: test.txt (没有那 ...

需要在工程根目录下有这个文件,否则会报错。但是显示的结果是文件根本不是工程根目录下的,他怎么会去工程目录下找。这是我感觉疑问的。。
作者: justin1258    时间: 2014-8-9 19:59
fantacyleo 发表于 2014-8-9 17:18
MyEclipse都出到2015了啊。。。话说我运行你这段代码,抛异常了。楼上的解释比较靠谱 ...

需要在工程根目录下有这个文件,否则会报错。但是显示的结果是文件根本不是工程根目录下的,他怎么会去工程目录下找。这是我感觉疑问的。。
作者: fantacyleo    时间: 2014-8-9 20:28
justin1258 发表于 2014-8-9 19:59
需要在工程根目录下有这个文件,否则会报错。但是显示的结果是文件根本不是工程根目录下的,他怎么会去工 ...

是的,不会到工程目录下找,会到你新指定的working dir下找,所以我运行时就报异常了。你能正常运行是怎么回事呢?
作者: justin1258    时间: 2014-8-10 00:09
fantacyleo 发表于 2014-8-9 20:28
是的,不会到工程目录下找,会到你新指定的working dir下找,所以我运行时就报异常了。你能正常运行是怎 ...

我的工程目录下有这个文件,要是把它删掉就会报错,不删就是上面的运行结果,尽管不应该去工程目录下找,,,但是但是,我也搞不清这是为什么...问题就在这里。
作者: fantacyleo    时间: 2014-8-10 00:16
justin1258 发表于 2014-8-10 00:09
我的工程目录下有这个文件,要是把它删掉就会报错,不删就是上面的运行结果,尽管不应该去工程目录下找, ...

是不是MyEclipse的搜索路径设定比较特殊?你命令行用javac手动编译试试




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2