当前位置: 技术问答>java相关
高手救命!Runtime.exec("ftp") 然后从 Process.getInputStream() 里面读,为何读不到东西
来源: 互联网 发布时间:2015-11-08
本文导语: 问题一: 当在 dos 窗口下输入 ftp ,会马上出现提示符 "ftp>" 但我在 java 程序中执行以下三句 Process p = Runtime.getRuntime().exec("ftp"); InputStream in = p.getInputStream(); while( (i=in....
问题一:
当在 dos 窗口下输入 ftp ,会马上出现提示符 "ftp>"
但我在 java 程序中执行以下三句
Process p = Runtime.getRuntime().exec("ftp");
InputStream in = p.getInputStream();
while( (i=in.read())!=-1 ) System.out.write(i);
结果没有读到预期的 "ftp>" ,怎么回事?
问题二:
我猜可能是因为 Process.getInputStream() 返回的是 BufferedInputStream ,
那么有没有办法从 BufferedInputStream 得到一个不使用缓冲的 InputStream ?
问题三:
其实是要完成这样一个功能:把用户的输入传给 ftp ,再把 ftp 的显示结果显示给用户看,请问谁有过成功经验吗?
我的程序如下:
import java.io.*;
class r {
public static void main(String[] args) throws Exception {
Process p = Runtime.getRuntime().exec("ftp");
final OutputStream out = p.getOutputStream();
final InputStream in = p.getInputStream();
final InputStream err = p.getErrorStream();
new Thread() {
public void run() { try {
int i;
while( (i=in.read())!=-1 ) { System.out.println(s); System.out.flush(); }
System.exit(0);
} catch( Exception e ) { e.printStackTrace(); System.exit(-1); } }
}.start();
new Thread() {
public void run() { try {
int i;
while( (i=err.read())!=-1 ) { System.out.write(i); System.out.flush(); }
System.exit(0);
} catch( Exception e ) { e.printStackTrace(); System.exit(-1); } }
}.start();
int i;
while( (i=System.in.read())!=-1 ) { out.write(i); out.flush(); }
System.exit(0);
}
}
|
呵呵,搞不定,好像ftp的命令就是不行。你参考一下以下代码。
BufferedReader in = new BufferedReader(new InputStreamReader(this.in));
try
{
for(String line = in.readLine(); line != null; line = in.readLine())
{
for(int tabIndex = line.indexOf("t"); tabIndex >= 0; tabIndex = line.indexOf("t"))
{
line = line.substring(0, tabIndex) + " " + line.substring(tabIndex + 1);
}
append(line + "n");
scrollToBottom();
}
}
catch(IOException e)
{
append("IOException: " + e);
}
BufferedReader in = new BufferedReader(new InputStreamReader(this.in));
try
{
for(String line = in.readLine(); line != null; line = in.readLine())
{
for(int tabIndex = line.indexOf("t"); tabIndex >= 0; tabIndex = line.indexOf("t"))
{
line = line.substring(0, tabIndex) + " " + line.substring(tabIndex + 1);
}
append(line + "n");
scrollToBottom();
}
}
catch(IOException e)
{
append("IOException: " + e);
}
|
是你对这3个流的使用有错误,你去
http://www-900.ibm.com/developerWorks/cn/java/index.shtml
找一个关于流的重定向的文章看。
http://www-900.ibm.com/developerWorks/cn/java/index.shtml
找一个关于流的重定向的文章看。
|
gz