2014-08-28 19 views
4

我想弄清楚是否有任何平臺獨立的方式來打開文本文件與默認的文本編輯器,即使該文件沒有在.txt結束。我嘗試了下面的代碼,但它會拋出沒有.txt擴展名的文件的例外。對於.txt文件工作得很好。在平臺上獨立的方式來打開默認文本編輯器中的任意文件

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

如果沒有擴展名,那麼操作系統無法確定它處理的文件類型,因此無法爲其選擇合適的應用程序。你不能只是重命名這個文件並添加'.txt'後綴嗎?您的另一種選擇是根據您所在的操作系統手動執行在文本編輯器(vi,記事本或其他)中調用某些內部版本的命令。 – Pshemo 2014-08-28 22:03:21

+0

有一個擴展名,但它不是.txt。另一種選擇是編寫自定義邏輯,以指定基於程序運行平臺的文本文件的編輯器。 – ATHER 2014-08-28 22:17:01

+0

你嘗試過使用'Desktop.edit()'嗎?不知道這樣做是否真的會更好,但它可能適用於更大的一組擴展。部分問題是顯然有擴展名('.doc','.png','.psd'等)。)*應該*不能在文本編輯器中打開,但不清楚應該如何定義區別。 – dimo414 2014-08-28 22:31:24

回答

-2

我試圖找出是否有打開一個文本文件默認的文本編輯器不管它是任何平臺無關方式。

您是否看到上述衝突? 所有平臺都有自己的方式來管理默認的文本編輯器,並且Java無法找到默認編輯器。 由於您的文件不是.txt,因此無法使用AWT中的漂亮方法。

但是,你可以

  • 使用File.renameTo(),並添加.txt擴展
  • 打開包含文件

我知道的目錄中,這兩種方法(尤其是第一個)有其缺點。 第一種方法實際上移動文件,甚至一個副本不能有效地解決問題。 但是,第二種方法可能會起作用。

如果你想保持平臺獨立,恐怕你不能做更多。

+3

稱它爲衝突(或更準確地說是矛盾)有點過分。顯然,可以啓動默認的'.txt'編輯器,並不是不合理的*,想象可以指定打開一個文件,就好像它是特定的類型一樣。一個虛構的'Desktop.open(File,MimeType)'方法。 – dimo414 2014-08-28 22:53:00

2

未經檢驗的,從來沒有少:


這個地方對我的作品:

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

免責聲明:我沒有做過超出上述煙霧測試任何研究。

+0

一個有趣的想法,你可以擴展?你有理由相信'Desktop.open()'會打開與符號鏈接/ Windows快捷方式名稱相關的編輯器嗎? – dimo414 2014-08-28 22:54:05

+0

's/nio/noi /'這是一個聰明的方法,絕對值得一試。 – 2014-08-28 23:29:41

+0

@DavidConrad你可以編輯答案來改善它們。 – dimo414 2014-08-29 01:04:33

相關問題