2011-10-20 35 views
1

我想使用默認程序打開從服務器下載的文件,並等待編輯完成(上傳服務器上更改的文件)。我在這樣的方式使這個:使用默認程序運行文件並等待編輯結束

public void init() { 
    try { 
     int fileId = Integer.valueOf(this.getParameter("id")); 
     System.out.println("Downloading"); 
     String filePath = downloadFile(fileId); 
     String[] cmd = { "cmd.exe", "/C", "start /wait " + filePath }; 
     System.out.println("Opening"); 
     Process p = Runtime.getRuntime().exec(cmd); 
     p.waitFor(); 
     System.out.println("Uploading"); 
     uploadFile(filePath, fileId, address, session); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

這是工作的情況下除外preety好,如果文件擴展名不與任何程序關聯。用於選擇程序的Windows顯示對話框以及在客戶端選擇程序結束後立即在服務器上上傳文件。有任何想法如何解決它?

+0

讓用戶決定何時想要上傳文件是否更容易?我的意思是給他看一個按鈕「上傳回來」或類似的東西。 – xappymah

+0

這樣的功能已經實現了,但我需要一個編輯按鈕,它的行爲如我上面所描述的那樣無懈可擊。 – user1005203

回答

0

這裏的問題是,如果沒有關聯的擴展應用程序,則會生成一個單獨的進程以詢問用戶要使用的應用程序。不幸的是,除非您確切知道要調用哪個應用程序,否則您從Java中可以做的事情不多,如果文件編輯器在啓動之前沒有與該文件關聯,則無法監視該文件編輯器。

這是一個操作系統功能,並沒有簡單的方法。根據文件類型的不同,您可能需要「猜測」用戶將使用的應用程序,並直接調用該應用程序,而不是命令解釋器,但這非常危險並且容易出錯。

+0

如果我看到correclty,它是僅限Windows的應用程序,因爲cmd.exe僅在Windows操作系統上存在。 主要問題是打開的應用程序可能無法編輯給定的文件,例如,圖像的默認打開的應用程序是Windows圖像預覽(或名稱),而不是MSPaint。 –

+0

這不是主要問題。我可以接受默認程序實際上不會編輯文件。 – user1005203