我有一个文件列表。可以说它看起来:
String[] lst = new String[] {
"C:\\Folder\\file.txt",
"C:\\Another folder\\another file.pdf"
};
我需要一些方法来使用默认程序打开这些文件,比如使用记事本的“file.txt”,使用 AdobeReader 的“another file.pdf”等等。
有谁知道怎么做?
有一种方法可以做到这一点:
java.awt.Desktop.getDesktop().open(file);
启动关联的应用程序以打开文件。
如果指定的文件是目录,则启动当前平台的文件管理器打开它。
Desktop类允许 Java 应用程序启动在本机桌面上注册的关联应用程序以处理 URI 或文件。
如果您使用 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]);
}
}
只要确保文件位于正确的位置,这应该可以正常工作。
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();
}
我不知道你现在有一个字符串数组。因此,这个使用正则表达式以您之前指定的格式处理文件列表。如果不需要,请忽略。
如果文件列表很大,并且您希望文件一个一个打开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\", ...}");
}
}