如何寻找指定文件的绝对路径,getAbsolutePath()不行!

jiaohuimin 2008-01-01 11:35:44
我想对某个已经存在的文件进行操作,比如希望运行某exe文件,如何操作呢?
找不到此文件的绝对路径;
考虑到文件的可移植性,希望能够在本地系统中返回文件的绝对路径,我试了
String filePath=file.getAbsolutePath();
但是此命令输出的是当前运行文件的路径,而不能输出指定文件的路径。
我是新手,请大家指教!小女不胜感激!
...全文
604 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaohuimin 2008-01-07
  • 打赏
  • 举报
回复
谢谢 tianlingyun,非常感谢!
约翰羊 2008-01-07
  • 打赏
  • 举报
回复
因为有很多软件是不需要安装的,直接复制就可以用.
所以我觉得最保险最可靠的方式就是自己搜索.
找到软件中几个关键的文件名,然后搜索所有的驱动器,如果只安装了一个就直接把位置保存下来.如果安装了多个,就让用户选择运行哪一个.

另外,如果是高级用户,就是弄一个浏览,让他告诉你软件位置.

tanlingyun 2008-01-03
  • 打赏
  • 举报
回复
你先把registry-3.1.3下载下来,它是一个开源包吧,用到了JNI,地址如下:http://www.gjt.org/download/time/java/jnireg/registry-3.1.3.zip
下载完后解压,在bin那个目录里有ICE_JNIRegistry.dll和registry.jar,这就是我们想要的,然后把registry.jar抽取出来,可以用jar命令也可以直接用WinRAR解压,解压出来是com.ice.jni.registry包。
下面建一个文件夹registry(主要是为了把这些东西放在一起好管理),把刚才解压出来的com文件夹和ICE_JNIRegistry.dll放在里面,然后新建一java文件,我这里叫RegeditTest,源代码如下:

import com.ice.jni.registry.*;

public class RegeditTest
{
public static void main(String[] str)
{
try
{
RegistryKey child = Registry.HKEY_LOCAL_MACHINE.openSubKey("SOFTWARE\\Tencent\\QQ");
String subKeyValue = child.getStringValue("install");
Runtime.getRuntime().exec(subKeyValue+"qq.exe");
System.out.println(subKeyValue);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

编译运行就可以得到QQ路径并启动了。你可以按照这个思路,把它加到你自己的代码中!!

还有就是用到的这些类比如RegistryKey是有源代码的,它里面有很多方法,不光可以读取注册表,还可以写入注册表,不过没有帮助文档,得看源代码才知道这些方法。

哦,忘了,要是注册表有中文字符的话读出来是乱码、写进去也是,这个我找了好多,还是没解决,换了几种编码也不行,抱歉!!!

我的叙述有点混乱,你不懂再跟贴吧。
薛定谔之死猫 2008-01-02
  • 打赏
  • 举报
回复
再贴点代码,叔叔帮你调
tanlingyun 2008-01-02
  • 打赏
  • 举报
回复
JDK有个Preferences类,可以操作注册表,你可以试试
老紫竹 2008-01-02
  • 打赏
  • 举报
回复
1 查找环境里面是否有,也就是路径里面PATH
2 查找注册表,比如QQ,他会放好多垃圾到注册表的
3 到程序的默认目录,多数用户不会改目录,顶多c: 改成 d:
4 所有硬盘搜吧。呵呵!

你想啊,人都不知道他在哪里,程序就更不知道了。 还不是挨个打开看看!

jiaohuimin 2008-01-02
  • 打赏
  • 举报
回复
比如,我想通过编制一个界面上的按钮,启动电脑上安装的QQ
但是如果程序在别人的电脑上运行,就需要知道此电脑的QQ的路径吧。

我该如何处理这个问题呢?
或者说不用知道路径?还有别的方式可以实现吗?

相对路径怎么实现呢?能不能请高手贴一些代码,学习一下!

感谢ing!
jiaohuimin 2008-01-02
  • 打赏
  • 举报
回复
非常感谢大家回帖,让我学习java的尽头更加足了!呵呵!
感谢
老紫竹
1 我通过访问环境变量的方式进行解决了!用了System.getenv()方法。
刚好我的工程软件在环境变量中存在变量。
我查了一下,在注册表中没有找到软件的信息,肯定是有的,但是我愚钝,没找着,请大家指教方法!

2 但是如果有的执行文件在环境变量中不存在变量,那肯定需要像
tanlingyun
讲的那样操作注册表了吧!
不会操作,还请大家指教,等待tanlingyun的代码ing···
3 分析老紫竹的第三种方法,觉得很难实现,没有头绪,大海捞针似的,如果有代码,希望可以指教!
tanlingyun 2008-01-02
  • 打赏
  • 举报
回复
哎!今天被你这个问题弄了一天,终于找到了一点突破,不过要说是运行任意指定程序,还有点麻烦,因为人家又不知道你把程序放在哪里了,我是用搜索注册表的方式查的路径,而且每个程序的路径它在注册表的键值还不太一样,一个一个找挺麻烦的,不过对于指定的少数几个程序还是可以的。我现在就把启动QQ这个问题弄好了,在我电脑上和同学电脑上都可以正确找到路径并运行。不过还是有点小问题,就是要是路径中有中文的话从注册表读出来是问号??,可能是编码有点问题,我正在解决呢?弄好了再告诉你。
老紫竹 2008-01-02
  • 打赏
  • 举报
回复
没看懂
1 你要运行某个文件
2 可是你不知道那个文件在哪?
3 我们该怎么做?

是这样吗?

我一般是搜索整个计算机硬盘,找到文件名相同的,逐个看。

程序也是这样的啊。
考虑到文件的可移植性,希望能够在本地系统中返回文件的绝对路径????

那就更应该用相对路径了,否则在windows下面是不支持 "/1234/5678/9.gif" 的

62,635

社区成员

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

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