获取我刚刚单击以使用 java 应用程序(jar 可执行文件)打开的文件的路径 [重复]

Posted

技术标签:

【中文标题】获取我刚刚单击以使用 java 应用程序(jar 可执行文件)打开的文件的路径 [重复]【英文标题】:Fetch the path of the file I just clicked to open with a java application (jar executable) [duplicate] 【发布时间】:2012-12-19 00:52:12 【问题描述】:

我有一个什么都不做的简单程序:

class ShowTheNameOfTheFile
  static public void main(String[] argv)

  

我将它编译为 ShowTheNameOfTheFile.jar 并配置我的 Windows 机器以使用它打开所有 txt 文件。

现在,当我单击一个 txt 文件时,它将打开我的 ShowTheNameOfTheFile.jar 程序。

在java中,我怎么知道用txt文件打开了ShowTheNameOfTheFile应用程序?

【问题讨论】:

@NikolayKuznetsov 谢谢。是不是更清楚了? @NikolayKuznetsov 现在呢? 是的,现在我明白你的意思了。 @NikolayKuznetsov 非常感谢您的帮助 文件名不是作为参数交给java程序的吗(argv)? 【参考方案1】:

您可以参考 Joop Eggen 的代码。

问题是,如果它是唯一的代码,并且您将这个 jar 分配给 Windows Open,它可能会默默地死掉,而不会将任何输出打印到任何控制台,因为它不是从控制台启动的。

首先,从控制台尝试

java -jar ShowTheNameOfTheFile.jar 1 2 3

如果数字被打印出来,那么它可以正常工作。

然后添加类似这样的东西

Process Builder pb = new ProcessBuilder("cmd", "/c", "start", "echo", args[0]);
pb.start();

到您的代码,然后双击一个文件。

【讨论】:

【参考方案2】:

命令行参数应该给出文件路径。

class ShowTheNameOfTheFile
    static public void main(String[] argv) 
        System.out.println(Arrays.toString(argv));
    

【讨论】:

"windows下,需要在注册表中附加一些细节"。这就是它不起作用的原因。

以上是关于获取我刚刚单击以使用 java 应用程序(jar 可执行文件)打开的文件的路径 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

VBA 无法获取您刚刚单击的按钮的属性

如何在java中获取执行目录路径[重复]

Java JAR 内存使用 VS 类文件内存使用

从另一个目录运行的 JAR 文件?

如何获取我刚刚在 java 程序中启动的进程的 PID?

获取附加到 Eclipse 的源 jar 文件以获取 Maven 管理的依赖项