执行第二次 readUntil方法 的时候 在方法体内 int ch= bufferReader.read();处没有任何反应了,是不是因为在执行第一次write("bea\r\n");的时候没有回车换行成功,还是因为什么其他原因啊package FTPTEST;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.StringReader;public class FTPCommonder { private String prompt = "$";
private PrintStream printStream;  
private InputStream inputStream;
 
public static void main(String[] args){
FTPCommonder ftp = new FTPCommonder();
ftp.ftpDown();
}

public void ftpDown(){     
try{
Process process = Runtime.getRuntime().exec("ftp 192.168.200.3");//连接FTP服务器
inputStream = process.getInputStream(); //输入流
printStream = new PrintStream(process.getOutputStream());//输出流

readUntil("User (192.168.200.3:(none)): ");// 第一次执行
write("bea\r\n");//登录账号

readUntil("Password: ");// 第二次执行
write("weblogic!\r\n");//登录密码

}catch(Exception e){
e.printStackTrace();
}
}

//读取分析结果
 public String readUntil(String pattern) {
try {
char lastChar = pattern.charAt(pattern.length() - 1);
StringBuffer stringBuffer = new StringBuffer();

BufferedReader bufferReader = new BufferedReader(new InputStreamReader(inputStream));

int ch= bufferReader.read(); while (true) {
stringBuffer.append((char)ch);
System.out.println(stringBuffer.toString());
if ((char)ch == lastChar) {
if (stringBuffer.toString().endsWith(pattern)) {//判断字符串是不是以指定文字作为结束
return stringBuffer.toString();
}
}

ch= bufferReader.read();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
 }  public void write(String value) {
  try {
  System.out.println("打印:"+value);
  printStream.print(value);
  printStream.flush();
  } catch (Exception e) {
  e.printStackTrace();
  }
 }}

解决方案 »

  1.   


    java 可以这样做交互?
      

  2.   

    现在第一步(readUntil)的输入流已经截获到,只是到第二步(readUntil)的时候,不知道什么原因没有获取到输入流。我自己认为是在第一步结束后,那个回车换行没有起作用,从而导致第二步(readUntil)没有获取到收入流而一直处在等待状态。
      

  3.   

    为什么要这么交互?不能用第三方包直接链接FTP么?
      

  4.   

    printStream.flush();
    去掉这句 放在第二次write后
      

  5.   

    在readUntil里面给加上bufferReader.close()
      

  6.   


    如果这么写的话,在第二次执行readUntil提示“java.io.IOException: Stream closed”错误
      

  7.   

    这里感觉很别扭,感觉inputStream最好还是用方法的参数导入,我也没测试,你改下试试
      

  8.   

    你调命令。还不如写好一个ftp的shell去调用了·····