2012-11-06 58 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透明。

相关问题