打开文件以查看其内容

时间:2013-04-14 18:45:35

标签: java file-io

我有一个文件列表。让我们说它看起来:

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

我需要一些方法来打开这些文件的默认程序,让我们说" file.txt"用记事本,"另一个file.pdf"使用AdobeReader等。

有谁知道怎么做?

5 个答案:

答案 0 :(得分:4)

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

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

的JavaDoc:

  

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

     

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

答案 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\", ...}");
    }

}