java工程目录


eclipse的基本工程目录叫做workspace,每个运行时的eclipse实例只能对应一个workspace,也就是说,workspace是当前工作的根目录。

在workspace中可以随意创建各种java相关的工程,普通的java应用,java web应用,web service应用等


拿普通的java application来说明:

通常创建一个java application工程,会创建一个工程目录,假设工程名称为:TestProject,那么在当前的workspace里将创建一个目录名为TestProject,同时选择src作为源码文件夹,bin作为输出路径,这样就构成了一个基本的java application工程。,在workspace中存在如下文件夹:

+workspace
  +TestProject
    -src
    -bin

创建的代码将写入src目录,输出的class文件将存在于bin目录。

 (如果在src目录下放一个de.csv,在同一目录下的java中path=this.getClass().getResource("de.csv").getPath()

返回的是 /WorkSpace/arbitraryP/bin/xxx/pp/de.csv,可见在编译的时候csv文件也输出到了bin目录下,

如果没有成功输出,那么File(path)会报错,继续下面对“相对路径”出错的原因有解释


       区分src目录和bin目录很重要,通常情况下,src目录只存放源代码,而所有工程相关的其他输出文件都会存放在bin目录下,最为重要的是:用Eclipse进行打包时根目录就是bin用jar包调用工程的时候默认的路径也要以bin为准??(不理解),到bin的层级数目就是最终的数目,因此可以说bin是最为重要的目录,而不是src




在src目录下创建一个类,就叫做TestClass,里面有一个main方法如下:


    public static void main(String[] args){  

        System.out.println(new File("test.txt").exist());  


  //意思是:直接通过“相对路径”创建File对象

 //编译输出的路径在bin目录,文件也会“输出”到bin目录,那么相对路径应该是会起作用的

 //但,事实上找不到这个文件

    }

同时在src目录下创建一个空的文件test.txt。保存工程,来查看workspace/TestProject/bin目录,

下面会存在两个文件:TestClass.class和test.txt。


此时设想,程序的内容就是检查test.txt文件是否存在,按照现在的目录规划,认为,在控制台上将打出“true”,ok,回到eclipse中,运行TestClass这个类。控制台输出了:false!

为什么得到了并非预期的结果呢?将目录切换到workspace/TestProject/bin目录下,

执行如下命令java TestClass,看看出现什么结果?true!对,就是true。


为啥同样的程序会有不同的结果呢?而且在eclipse上运行和在bin目录下运行两者的操作应该是一样的??

问题出在java.exe本身的一个参数-cp(classpath)上!


eclipse默认的classpath包括三个部分:
1、jdk的bin目录;
2、工程引用的所有其他jar包路径

3、工程根路径(项目名称对应的文件)(对,不是bin路径)

(那么就是说在运行File("test.txt")的时候,去项目名称文件下找test.txt文件自然不存在)


可以理解来,在classpath所指的“根路径”中并不存在这个test.txt文件,用相对路径描述,这个文件实际存在于src/test.txt和bin/test.txt。也就是说,classpath默认的路径是workspace-testproject下,而不是workspace-testproject-bin下,所以才找不到这个文件。这是经常出现的问题!



这个时候就有疑问了,如果打包发布工程,是不是jar包中会把testproject根目录作为包中的根目录呢?

幸运的是,eclipse考虑好了这个问题。通过eclipse的导出jar能力,bin目录会作为jar的根目录

(是不是即使是上面的相对路径的写法打包后,也可以正确运行???这里面只是在说明eclipse运行时的classpath或是说基准目录是哪个,为了提示在eclipse中编写代码读取文件的时候注意默认的“相对路径”是从“项目路径”开始的)

而不是bin的上层的工程目录,这样类的包路径就是正确的,同时,工程目录下的资源文件、配置文件等也被拷贝到这里,也就是相当于把工程目录下的这些文件拷贝到来bin目录后再打包,这样文件的相对路径也就符合默认的classpath了。

 

从上面可以总结出来:Eclipse直接运行时,是以工程的根目录作为基准目录。而打包成jar运行时,则是以bin目录作为基准目录。这两者相差了一级目录,如果理解的不好,可能会导致错误。希望大家注意!
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值