我有一个文件列表。让我们说它看起来:
String[] lst = new String[] {
"C:\\Folder\\file.txt",
"C:\\Another folder\\another file.pdf"
};
我需要一些方法来打开这些文件的默认程序,让我们说" file.txt"用记事本,"另一个file.pdf"使用AdobeReader等。
有谁知道怎么做?
答案 0 :(得分:4)
有一种方法可以做到这一点:
java.awt.Desktop.getDesktop().open(file);
启动关联的应用程序以打开该文件。
如果指定的文件是目录,则启动当前平台的文件管理器以将其打开。
答案 1 :(得分:1)
Desktop类允许Java应用程序启动在本机桌面上注册的关联应用程序来处理URI或文件。
答案 2 :(得分:1)
如果您使用的是J2SE 1.4或Java SE 5,最佳选择是:
for(int i = 0; i < lst.length; i++) {
String path = lst[i];
if (path.indexOf(' ') > 0) {
// Path with spaces
Runtime.getRuntime().exec("explorer \"" + lst[i] + "\"");
} else {
// Path without spaces
Runtime.getRuntime().exec("explorer " + lst[i]);
}
}
答案 3 :(得分:0)
只需确保文件位于正确的位置,这应该可以正常工作。
try
{
File dir = new File(System.getenv("APPDATA"), "data");
if (!dir.exists()) dir.mkdirs();
File file = new File(dir"file.txt");
if (!file.exists()) System.out.println("File doesn't exist");
else Desktop.getDesktop().open(file);
} catch (Exception e)
{
e.printStackTrace();
}
答案 4 :(得分:0)
我现在不知道你有一个String数组。因此,这个使用正则表达式以您之前指定的格式处理文件列表。如果不需要,请忽略。
如果文件列表很大,您希望逐个打开的文件cmd
效果很好。如果您希望它们一次打开,请使用explorer
。仅适用于Windows,但几乎适用于所有JVM版本。所以,这里需要考虑一个权衡因素。
public class FilesOpenWith {
static String listOfFiles = "{\"C:\\Setup.log\", \"C:\\Users\\XYZ\\Documents\\Downloads\\A B C.pdf\"}";
public static void main(String[] args) {
if (args != null && args.length == 1) {
if (args[0].matches("{\"[^\"]+\"(,\\s?\"[^\"]+\")*}")) {
listOfFiles = args[0];
} else {
usage();
return;
}
}
openFiles();
}
private static void openFiles() {
Matcher m = Pattern.compile("\"([^\"]+)\"").matcher(listOfFiles);
while (m.find()) {
try {
Runtime.getRuntime().exec("cmd /c \"" + m.group(1) + "\"");
// Runtime.getRuntime().exec("explorer \"" + m.group(1) + "\"");
} catch (IOException e) {
System.out.println("Bad Input: " + e.getMessage());
e.printStackTrace(System.err);
}
}
}
private static void usage() {
System.out.println("Input filelist format = {\"file1\", \"file2\", ...}");
}
}