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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张 涛 中级黑马   /  2012-9-11 09:16  /  1956 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张 涛 于 2012-9-23 07:20 编辑

Eclipse的执行,执行时要使用java命令,java在path下,可以使用。目标文件在D:\workspace\test\bin下,工程名是test,执行目标文件class,要把class放在classPaht下才行,而我的classpath中只有“.;C:\jdk1.6.0_32\lib\dt.jar;C:\jdk1.6.0_32\lib\tools.jar;”。没有把Eclipse的工作台放在classpath下,这样要执行,就只有使用当前路径,因为我配置了“.”,也就是执行时的当前路径是D:\workspace\test\bin。那么现在我bin目录下放一个配置文件info.txt,现在用代码加载,使用代码如下:
InputStream ips = PropertiesDemo.class.getClassLoader().getResourceAsStream("info.txt");
结果是找不到,为什么?
下面问几个问题。
1.是不是我分析的当前路径是工作台\工程名\bin?
2.如果是,我的为什么找不到?
3.如果是,文件放在工程下,也就是“工作台\工程名”路径下,怎么指定该路径?
4.如果不是,那么正确的是什么?大神,出现吧!!

工作台对应D:\workspace;工程名对应“test”;工作台\工程名 对应 “D:\workspace\test”

2 个回复

倒序浏览
eclipse是非常常用的开发平台,利用eclipse的插件平台,可以将eclipse扩展成为非常优秀的专有语言ide,这里主要提到一个关于eclipse利用jdt插件开发java应用时遇到的问题。

首先我们说明一下elipse对工程的管理。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目录下创建一个类,就叫做TestClass,里面有一个main方法如下:



Java代码  
1.public static void main(String[] args){  
2.    System.out.println(new File("test.txt").exist());  
3.}  


同时在src目录下创建一个空的文件test.txt。什么都不要做,保存工程,打开资源管理器,我们来查看workspace/TestProject/bin目录,下面会存在两个文件:TestClass.class和test.txt。

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

为什么我们得到了并非我们预期的结果呢?先别着急,我们打开windows的命令行界面(或者linux的shell都ok),将目录切换到 workspace/TestProject/bin目录下,执行如下命令java TestClass,看看出现什么结果?true!对,就是true。

为啥同样的程序会有不同的结果呢?这个答案很简单,就出在了java.exe本身的一个参数-cp(classpath)上!

eclipse默认的classpath包括三个部分:
1、jdk的bin目录;
2、工程引用的所有其他jar包路径
3、工程根路径(对,不是bin路径)(编译的class文件会被复制到bin目录下)

那么我们就可以理解来,在classpath的根路径中并不存在这个test.txt文件,用相对路径描述,这个文件实际存在于 src/test.txt和bin/test.txt。那么这个时候就有疑问了,如果我们打包发布工程,是不是jar包中就会有bin这个目录呢?幸运的 是,eclipse考虑好了这个问题。通过eclipse的导出jar能力,bin目录会作为jar的根目录,而不是bin的上层的工程目录,这样类的包 路径就是正确的,同时,工程目录下的资源文件、配置文件等也被拷贝到这里,也就是相当于把工程目录下的这些文件拷贝到来bin目录后再打包,这样文件的相 对路径也就符合默认的classpath了。

eclipse实际是提供来一种策略来实现源代码文件和配置\资源文件的单独管理能力,利用classpath兜了个圈子,这种做法有些晦涩,但是不失为软件工程的一个启发。
回复 使用道具 举报
给力啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马