我想获取文件路径,方法是将其拖放到.jar文件中。
是否可以不进行批量拦截?像this的家伙一样吗?
第一个问题:是否可以通过将文件拖放到其中来打开Jar文件
第二个问题:如果第一个问题的回答为“是”,我可以获取删除的文件的绝对路径吗?
答案 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