2012-11-06 64 views
2

如何從我的java應用程序打開vi編輯器? 我已經試過這如何從同一終端的Java應用程序中打開vi編輯器?

Process p = new ProcessBuilder("xterm","-e","vi /backup/xyz/test/abc.txt").start(); 

int exitVal = p.waitFor(); 
System.out.println("Exited with error code "+exitVal); 

但這打開vi在一個新的終端。 我想vi編輯器在我的應用程序正在運行

+0

Java進程是否與VI安裝在同一臺機器上運行? – MadProgrammer

回答

2

應該是簡單的同一個終端打開:離開了xterm的,剛開始六:

Process p = new ProcessBuilder("vi", "/backup/xyz/test/abc.txt").start(); 

如果您想了解更多的命令行參數vi,將它們添加爲單獨的字符串,而不是在第一個參數的「」中。

和啓動vi等終端程序自然需要,你開始從可見光端Java應用程序,所以vi有一個終端使用,但我想這是如此。

+0

所以如果我只用 進程p = new ProcessBuilder(「vi /backup/xyz/test/abc.txt」)。start(); 它編譯但運行時給我這個錯誤 無法運行程序「vi/backup/xyz/test/abc」:java.io.IOException:error = 2,沒有這樣的文件或目錄 – san2505

+0

@ san2505我作出了回答更具體的 – hyde

+0

@ san2505 - 您可能必須使用您的機器上實際存在的路徑。我相信這僅僅是一個例子... – jahroy

1

的問題在這裏強調:

How can I launch VI from within Java under commons-exec?

但是自從Java 1.7,你可以用下面的例子中透明地重定向並有充分的控制檯功能

System.out.println("STARTING VI"); 
    ProcessBuilder processBuilder = new ProcessBuilder("/usr/bin/vi"); 
    processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 
    processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT); 
    processBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); 

    Process p = processBuilder.start(); 
     // wait for termination. 
     p.waitFor(); 
    System.out.println("Exiting VI"); 

這將允許你打開VI透明。

相關問題