Java 打开文件以查看其内容

Java 打开文件以查看其内容,java,file-io,Java,File Io,我有一份文件清单。让我们说它看起来: String[] lst = new String[] { "C:\\Folder\\file.txt", "C:\\Another folder\\another file.pdf" }; 我需要一些方法来用默认程序打开这些文件,比如用记事本打开“file.txt”,用AdobeReader打开“另一个file.pdf”,等等 有人知道怎么做吗?有一种方法可以做到这一点: java.awt.Desktop.getDesktop().op

我有一份文件清单。让我们说它看起来:

String[] lst = new String[] {
    "C:\\Folder\\file.txt", 
    "C:\\Another folder\\another file.pdf"
};
我需要一些方法来用默认程序打开这些文件,比如用记事本打开“file.txt”,用AdobeReader打开“另一个file.pdf”,等等


有人知道怎么做吗?

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

java.awt.Desktop.getDesktop().open(file);
JavaDoc: 启动关联的应用程序以打开文件

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


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

只要确保文件位于正确的位置,就可以正常工作

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();
}

如果您使用的是J2SE 1.4 o 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]);
    }
}
for(int i=0;i0{
//带空格的路径
Runtime.getRuntime().exec(“explorer\”“+lst[i]+”\”);
}否则{
//无空格路径
Runtime.getRuntime().exec(“资源管理器”+lst[i]);
}
}

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

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

}

这假设windows是O/S。其他答案已经说明了如何在跨平台中实现这一点way@MrWiggles我认为这是一个公平的假设(基于问题的文件路径),这个答案确实有其价值,因为它指出了
java.awt.Desktop
,尽管它确实需要一个tweek才能在其他(非windows)上工作系统。@MrWiggles
java.awt.Desktop
是在JavaSE6中引入的。但是等等,您可以编辑其他操作系统的答案。