通过JAVA调用 操作系统的 FTP壳,进行交互的问题。

myepoch 2010-09-27 05:18:14
执行第二次 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();
}
}

}

...全文
196 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
myepoch 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jiewo 的回复:]
你调命令。还不如写好一个ftp的shell去调用了·····
[/Quote]

我的目的是要与FTP交互
行舟 2010-09-29
  • 打赏
  • 举报
回复
你调命令。还不如写好一个ftp的shell去调用了·····
24K純帥 2010-09-29
  • 打赏
  • 举报
回复
学习额。。
whut_lcy 2010-09-29
  • 打赏
  • 举报
回复
自己SOCKET重新封装FTP、、、
myepoch 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qingtianliuyun 的回复:]
在readUntil里面给加上bufferReader.close()
[/Quote]

如果这么写的话,在第二次执行readUntil提示“java.io.IOException: Stream closed”错误
qingtianliuyun 2010-09-28
  • 打赏
  • 举报
回复
在readUntil里面给加上bufferReader.close()
myepoch 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 andesen 的回复:]
printStream.flush();
去掉这句 放在第二次write后
[/Quote]

这个试验后不起作用的。谢谢回复了。
myepoch 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 phyerbarte 的回复:]
为什么要这么交互?不能用第三方包直接链接FTP么?
[/Quote]

是的,不能用第三方包。否则就简单多了啊。呵呵
andesen 2010-09-28
  • 打赏
  • 举报
回复
printStream.flush();
去掉这句 放在第二次write后
phyerbarte 2010-09-28
  • 打赏
  • 举报
回复
为什么要这么交互?不能用第三方包直接链接FTP么?
myepoch 2010-09-28
  • 打赏
  • 举报
回复
现在第一步(readUntil)的输入流已经截获到,只是到第二步(readUntil)的时候,不知道什么原因没有获取到输入流。我自己认为是在第一步结束后,那个回车换行没有起作用,从而导致第二步(readUntil)没有获取到收入流而一直处在等待状态。
youjianbo_han_87 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 myepoch 的回复:]

有人帮忙吗?
[/Quote]

java 可以这样做交互?
myepoch 2010-09-28
  • 打赏
  • 举报
回复
有人帮忙吗?
qingtianliuyun 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 myepoch 的回复:]
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(inputStream));
[/Quote]
这里感觉很别扭,感觉inputStream最好还是用方法的参数导入,我也没测试,你改下试试
myepoch 2010-09-28
  • 打赏
  • 举报
回复
有人知道什么原因吗

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧