2

我有一个文件列表。可以说它看起来:

String[] lst = new String[] {
    "C:\\Folder\\file.txt", 
    "C:\\Another folder\\another file.pdf"
};

我需要一些方法来使用默认程序打开这些文件,比如使用记事本的“file.txt”,使用 Adob​​eReader 的“another file.pdf”等等。

有谁知道怎么做?

4

5 回答 5

4

有一种方法可以做到这一点:

java.awt.Desktop.getDesktop().open(file);

Java文档:

启动关联的应用程序以打开文件。

如果指定的文件是目录,则启动当前平台的文件管理器打开它。

于 2013-04-14T18:50:28.893 回答
1

Desktop类允许 Java 应用程序启动在本机桌面上注册的关联应用程序以处理 URI 或文件。

于 2013-04-14T18:50:42.680 回答
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]);
    }
}
于 2013-04-14T19:06:54.050 回答
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();
}
于 2013-04-14T18:51:22.160 回答
0

我不知道你现在有一个字符串数组。因此,这个使用正则表达式以您之前指定的格式处理文件列表。如果不需要,请忽略。

如果文件列表很大,并且您希望文件一个一个打开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\", ...}");
    }

}
于 2013-04-14T20:06:01.657 回答