如何在java程序中获取当前程序所在的目录?高分

Dilphi10 2003-08-13 10:44:34
我在c:\j1目录下有一个程序t1.class,在同一目录下还有一个t2.ini文件,我要在t1.class程序中操作文件t2.ini

现在:我使用命令行执行程序
c:\j1>java t1.class
程序完成正确执行。
但如果在其它的目录下执行就找不到t2.ini文件
c:\>java t1.class
在t1.class程序中如何打开t2.ini

问:如何在t1程序中获取t1所在的目录?

注:j1目录为不确定目录名称所以不能指定绝对路径
...全文
4065 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hayai 2003-08-14
  • 打赏
  • 举报
回复
有没有用t1.class.getResource("t2.ini")?问题解决了没有?可以结贴了没有?
jiaojian77 2003-08-13
  • 打赏
  • 举报
回复
URL l = ClassLoader.getSystemResource("t1.class");
String strPath = l.getPath();
hayai 2003-08-13
  • 打赏
  • 举报
回复
t1.class.getResource("t2.ini")
feiyuegaoshan 2003-08-13
  • 打赏
  • 举报
回复
如果上面两个问题都回答:是
可以这样解决,
把t2.ini放到系统的classpath所包含的路径内,

那么可以使用读取系统流的方法找到配置文件。
feiyuegaoshan 2003-08-13
  • 打赏
  • 举报
回复
以上各位的方法都解决不了楼主的问题。

问楼主两个问题:
1.t2.ini文件的路径不是确定的?
2.t1.class是各个路径下都可能被执行?
stonewang 2003-08-13
  • 打赏
  • 举报
回复
关注
pqds 2003-08-13
  • 打赏
  • 举报
回复
两种方法:
Properties properties = System.getProperties();
System.out.println(properties.getProperty("user.dir"));

File file=new File(".");
System.out.println(file.getAbsolutePath());
pqds 2003-08-13
  • 打赏
  • 举报
回复
程序运行时的当前路径
File file1 = new File(".");
file1.list();
pqds 2003-08-13
  • 打赏
  • 举报
回复
当前目录
File file1 = new File(".");
file1.list();

xjffj 2003-08-13
  • 打赏
  • 举报
回复
就是jiaojian77(长夜漫漫)的方法了,不认为从系统中取路径是好的方式
jiaojian77 2003-08-13
  • 打赏
  • 举报
回复
加上包名不就行了。
icebound1 2003-08-13
  • 打赏
  • 举报
回复
hayai 2003-08-13
  • 打赏
  • 举报
回复
10.java.util.ResourceBundle用的是ClassLoader的方法,所以properties文件应该在classes目录下或者在jar里面。
11.如果properties文件是相对project目录,也就是说一定要用File的方式取properties文件怎么办?
这是个困惑我的问题,我一直用FileInputStream在传给Property class来解决,但是,这样就没有ResourceBundle的另一个功能,internationalization.在我的一个project里,我可以用ResourceBundle拿到与batch文件在同一目录下的properties文件,但是后来又不work了。郁闷后,我认为不同的JVM有不同的效果。就想在用ClassLoader getResource("xxxxx")时,xxxxx用'/'开头和没有'/'开头在不同JVM下效果不同。
hayai 2003-08-13
  • 打赏
  • 举报
回复
关于定位resource file真的太有的讲头了。但是讲到底就两种,从class loader根目录开始找,和从project根目录开始找。从class loader目录下取resource是用ClassLoader getResource的方法;从project根目录下取resource是用java.io里面based on File的方法。java.io里面based on File的方法是指java.io里面所有关于Fiel的类(FileReader,FileWriter,FileInputStream,FileOutputStream)都是最终用File来定位文件的。
我们从Jbuilder开始讲起,用jbuilder开启一个project,会有一个project根目录(例如C:\projects\test\),和一个这个根目录下的classes目录(例如C:\projects\test\classes\)。对于test目录下的文件sample.jpg,我们用new File("sample.jpg")。对于classes目录下的文件,首先Jbuilder必须设置为copy改类文件,然后用Thread.getCurrentTread().getContextLoader().getResource("sample.jpg")来得到它。如果不是文本,一般用getResourceAsStream更直接。
引伸的问题:
1.如何取project所在硬盘根目录文件(“c:\sample.jpg”)?
new File("/sample.jpg");
2.如何取根目录下面的子目录下的文件(“test\classes\com\toyota\meta\sample.jpg”)?
getResourceAsStream("com/toyota/meta/sample.jpg");
当用java.io.File定位文件类同。
3.如何取调用的jar里面的文件?
同ClassLoader getResource一样没有区别。
4.project打成包后,resource也在包里有没有问题?
没有问题,用法一样。当然只是用class loader的方法。
5.从jar里面拿外面的文件怎么拿?
同样拿,一点区别都没有。code不变。
6.上面讲了getResourceAsStream("com/toyota/meta/sample.jpg"),有没有简单的写法?
有,如果你有一个Class在相同目录。用XXXClass.class.getResourceAsStream("sample.jpg");
7.用batch文件启动jar里的程序时,所谓的project根目录在哪里?
在这个batch文件所在目录。
8.用tomcat or resin,所谓的project根目录在哪里?
在tomcat or resin的根目录。
9.Log4J appends出来的log文件就是按造File的load法生成的。Velocity找template file也是这样,但是你可以配置Velocity让它也能从jar里面找template文件。
farmer0512 2003-08-13
  • 打赏
  • 举报
回复
用System.getProperty("user.dir")是获得当前的目录,不一定是 tl.class所在的目录。
写在classpath里比较保险,t1.class可以找到t2.ini。
Dilphi10 2003-08-13
  • 打赏
  • 举报
回复
这样子不行,我想要的是在java程序中获取当前程序所在的目录
因为t2.ini可能有名的文件
难道真的不行吗?
就像VB一样,他有一个函数可以获取应用程序的目录而不是运行目录。
feiyuegaoshan 2003-08-13
  • 打赏
  • 举报
回复
“properties.getProperty("user.dir")获取的是什么目录?”
当前class正在被执行的目录。
可以直接写“System.getProperty("user.dir");

只要把t2.ini放到classpath路径内,t1.class就可以在任意位置访问,

能满足你的需求吗?
Dilphi10 2003-08-13
  • 打赏
  • 举报
回复
对于 jiaojian77(长夜漫漫) 兄的方法如果存在多个t1.class如何确定哪一个才是我所需要的t1.class(如:c:\j1下有一个t1.class,d:\j2下有一个t1.class,两个目录我都设置在classpath变量中,只是它们分属不同的包)
Dilphi10 2003-08-13
  • 打赏
  • 举报
回复
答 feiyuegaoshan(飞跃) 的两个问题
1.t2.ini文件的路径不是确定的?(是的,对于目录j1可以是任意的位置及名称)
2.t1.class是各个路径下都可能被执行?(是的,t1.class在任意位置下都可以执行。)

相问一下properties.getProperty("user.dir")获取的是什么目录?是t1.class所在的目录还是运行t1.class的目录(即是输入java命令的目录如:c:\abc>java t1.class)
NewStarter 2003-08-13
  • 打赏
  • 举报
回复
设置CLASSPATH体统参数

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧