2014-05-21 25 views
2

我試圖使用運行系統打開文件。這類似於打開Windows命令提示符,然後執行該命令。使用Java應用程序打開文件

下面是代碼:

import java.io.IOException; 

public class OpenFile { 

    public static void main(String[] args) { 
     String fileName = "E:\\Myfile.txt"; 
     try { 
      Runtime rt = Runtime.getRuntime(); 
      rt.exec(new String[]{"cmd.exe", "/c", "start"}); 
      rt.exec(new String[]{fileName}); 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } 
    } 

} 

命令提示被成功打開。但文件Myfile.txt未打開。我在控制檯中得到以下錯誤:

java.io.IOException: CreateProcess: E:\Myfile.txt error=193 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:81) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:30) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:451) 
    at java.lang.Runtime.exec(Runtime.java:591) 
    at java.lang.Runtime.exec(Runtime.java:464) 
    at OpenFile.main(OpenFile.java:10) 

如何成功打開文件?

+1

我不能把手指放在它上面(從來沒有真正使用過類似的東西),但如果我沒有弄錯,有一種方法可以在基於Windows和其他基於平臺的計算機上使用。 我建議你選擇的是, 反正不是限制你的應用程序只是.exe文件,這可能會有所幫助: http://about-java-programming.blogspot.be/2007/02/javaioioexception -createprocess.html – Stultuske

+0

@Stultuske你正在考慮[java.awt.Desktop#open()](http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html#open (java.io.File)) –

回答

2

您正在嘗試執行fileName中的Runtime對象,這是錯誤的!嘗試象下面這樣:

rt.exec(new String[]{"cmd.exe", "/c", "start", fileName}); 
3

不是一個真正的答案,但我想描述究竟是在應用程序的當前版本中發生的事情是很重要的。

在這部分代碼中;

 rt.exec(new String[]{"cmd.exe", "/c", "start"}); 
     rt.exec(new String[]{fileName}); 

您正在執行外部命令。引述的問題,

類似於打開Windows命令提示符,然後執行命令

你需要認識到什麼是,無論作爲字符串被執行你給。它沒有排隊或什麼。因此,重新讀取您的代碼,您會要求您的程序執行2個不同的命令。第一個看起來像;

cmd.exe /c start 

如果在Windows命令提示符下運行,那麼執行時會沒有問題。你的程序嘗試執行的第二個「命令」看起來像這樣;

E:\Myfile.txt 

嘗試在命令提示符下鍵入 - 它會產生一個錯誤。可能類似於「找不到命令」。這是例外java.io.IOException: CreateProcess告訴你。 Java無法創建您要求的新流程。

現在,至於實際回答OP,我建議這個;

 rt.exec(new String[]{"cmd.exe", "/c", "start", fileName}); 

其中,不幸的是看起來很像早期的答案。

+0

感謝您的解釋。無法註冊。沒有足夠的聲譽。 – user3659788

+0

不客氣! :) – chronodekar

相關問題