独立于平台的方式在默认文本编辑器中打开任意文件

时间:2014-08-28 21:54:04

标签: java

我试图弄清楚是否有任何独立于平台的方法来使用默认文本编辑器打开文本文件,即使该文件没有以.txt结尾。我尝试了以下代码,但是对于没有.txt扩展名的文件会抛出异常。适用于.txt个文件。

       Desktop dt = Desktop.getDesktop();
       try
       {
            dt.open(fileName);      
       }
       catch(Exception e){
          // Catch exception here 
       }

2 个答案:

答案 0 :(得分:2)

未经测试,从未如此:

  • 创建symbolic link via nio
    • 使用正确的扩展名
    • in temp dir
  • 在符号链接
  • 上调用Desktop.open()

这对我来说很适合:

public static void main(String... args) throws IOException {
    Path source = FileSystems.getDefault().getPath(args[0]);
    Path symLink = Files.createTempFile(source.getFileName().toString(), ".txt");
    Files.delete(symLink);
    Files.createSymbolicLink(symLink, source);
    Desktop.getDesktop().open(symLink.toFile());
}

免责声明:除上述烟雾测试外,我没有做过任何研究。

答案 1 :(得分:-2)

  

我想弄清楚是否有任何平台无关方式用默认文本编辑器打开文本文件。

你看到上面的冲突吗? 所有平台都有自己的方式来管理默认文本编辑器,Java无法找到默认编辑器。 由于您的文件不是.txt,因此无法使用AWT中的好方法。

但是,你可以

  • 使用File.renameTo()并添加.txt扩展名
  • 打开包含文件的目录

我知道这两种方法(尤其是第一种方法)都有其缺点。 第一种方法实际上是移动文件,甚至副本也没有有效地解决问题。 但是,第二种方法可能有效。

如果你想保持平台独立,我担心你不能做得更多。