如何通过将文件拖放到jar文件来打开文件

时间:2018-07-17 10:04:34

标签: java bash file batch-file

我想获取文件路径,方法是将其拖放到.jar文件中。

是否可以不进行批量拦截?像this的家伙一样吗?

第一个问题:是否可以通过将文件拖放到其中来打开Jar文件

第二个问题:如果第一个问题的回答为“是”,我可以获取删除的文件的绝对路径吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,这是不可能的,因为Windows资源管理器不允许您将文件拖动到jar文件顶部以启动jar。您将需要使用辅助批处理脚本,如下所示:

@start java -jar applicationfilename.jar %1

之所以可行,是因为当您将文件拖放到批处理文件上时,Windows会使用文件的路径作为第二个参数%1(%0是批处理文件的路径)来启动该批处理文件。

然后,在Java应用程序中,您可以通过使用main中的默认String [] args访问参数:

public class DroppedFileAsArgumentDemo {

    public static void main(String[] args) throws InterruptedException {
        if (args.length == 0) {
            System.out.println("No file");
        } else {
            // Print the path of the file
            System.out.println(args[0]);
        }
        // To let you see the result before the window closes
        Thread.sleep(10000);
    }

}

您最终会得到类似C:\Users\saloalv\Documents\NetBeansProjects\DroppedFileAsArgumentDemo\dist\README.txt的路径
路径中的空白将被保留。


为了娱乐,我还制作了一个JavaFX应用程序,该应用程序在GUI中执行相同的工作。在这里,您可以看到使用JavaFX时如何在应用程序内部传递参数。

import java.util.List;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

public class DroppedFileAsArgumentJavafxDemo extends Application {

    public static void main(String[] args) {
        // Launches javafx app using the arguments
        Application.launch(args);
    }

    @Override
    public void start(Stage window) throws Exception {
        Label filename = new Label();

        // Receive arguments from launch(args)
        List<String> arguments = getParameters().getRaw();

        if (arguments.isEmpty()) {
            filename.setText("No file");
        } else {
            // sets text to first argument, the file name
            filename.setText(arguments.get(0));
        }

        // Display filename
        Scene s = new Scene(filename);
        window.setScene(s);
        window.show();
    }

}

要不使用丑陋的黑色终端,您需要使用javaw而不是java来启动它:
@start javaw -jar DroppedFileAsArgumentJavafxDemo.jar %1