你这个思路是错误的,不可能实现。首先getInputStream()只能获得Perl解释器的输入流,Perl打印应该输出到输出流,所以只能使用getOutputStream(),但输出流没有办法读。此路不通。
换一个思路,命令行下,通常都提供管道功能(通过|连接),所以可以使用命令行所提供的管道,Java程序中,只需要从System.in中读取流就行了。下面是一个简单的测试例子:
// ProcessInput
// import Java packages
import java.io.*;
public class ProcessInput {
public static void main( String[] args ) throws Exception {
Reader in = new InputStreamReader( System.in );
BufferedReader bin = new BufferedReader( in );
String s = bin.readLine();
int counter = 0;
while( s != null ) {
System.out.println( ++counter + ": " + s );
s = bin.readLine();
}
}
}
命令行下命令为
HelloWorld.exe | java ProcessInput
HelloWorld.exe打印出十个"Hello, World!",输出为
1: Hello, World!
2: Hello, World!
3: Hello, World!
4: Hello, World!
5: Hello, World!
6: Hello, World!
7: Hello, World!
8: Hello, World!
9: Hello, World!
10: Hello, World!
换一个思路,命令行下,通常都提供管道功能(通过|连接),所以可以使用命令行所提供的管道,Java程序中,只需要从System.in中读取流就行了。下面是一个简单的测试例子:
// ProcessInput
// import Java packages
import java.io.*;
public class ProcessInput {
public static void main( String[] args ) throws Exception {
Reader in = new InputStreamReader( System.in );
BufferedReader bin = new BufferedReader( in );
String s = bin.readLine();
int counter = 0;
while( s != null ) {
System.out.println( ++counter + ": " + s );
s = bin.readLine();
}
}
}
命令行下命令为
HelloWorld.exe | java ProcessInput
HelloWorld.exe打印出十个"Hello, World!",输出为
1: Hello, World!
2: Hello, World!
3: Hello, World!
4: Hello, World!
5: Hello, World!
6: Hello, World!
7: Hello, World!
8: Hello, World!
9: Hello, World!
10: Hello, World!
解决方案 »
- 请问java如何实现多线程的读写二进制文件?
- DatabaseMetaData.getTables()怎样过滤系统表
- 数据库连接问题???
- 选择题4道求教
- 通过apache的common-net.jar写的ftp上传,上传后的图片都不能用,请教各位大虾如何解决?老弟跪求了!
- 寻求编写java的工具,包括初学、熟悉、等阶段各应用什么工具?
- 请教:多点广播发生异常,IP用.0和.255都是一样的异常
- 数据库连接问题????
- 极度郁闷中,看看大家友没有碰到种运行的问题
- 我觉得JAVA的帖子回复率很低,大家给斑竹提点意见怎么样?
- 如何在Redhat--linux下安装使用jdk?
- Java程序调试问题
其实我是想由那个Java文件来调用运行那个Perl文件,通过这个Java文件将Perl的输出再打印到屏幕上。但是类似于HelloWorld.exe | java ProcessInput这样的好像还是要手动运行那个Perl文件。
你这里错误的原因是你的Perl程序应该通过shell启动,而不是自己启动,可以定义一个字串如下:
String[] cmd = { "sh", "-c", dir + " " + task };
linux下可以查看sh的manpage,输入man sh即可
-c 指示sh读取后面的命令
dir + " " + task 就是你要执行的命令了
而在Console下直接运行sh -c ./free_align.pl aattagcaatagcat ccagttatc(free_align.pl对应于dir,aattagcaatagcat ccagttatc对应于task)也是参数没有起作用。但在Console下直接./free_align.pl aattagcaatagcat ccagttatc或者perl ./free_align.pl aattagcaatagcat ccagttatc都是可以的。