连续读取ftp.exe控制台输出,而不是按行读取

时间:2015-04-16 16:38:08

标签: java batch-file cmd ftp command-prompt

我有一个将执行FTP下载的批处理文件,如果只是点击它,它会在运行时显示所有输出,但是,它不会显示所有哈希值(####),直到在Java中以编程方式运行时,下载已完成。有没有办法在下载过程中系统打印#?我假设程序正在等待整行进入,所以有没有办法将它分成几部分?

批处理文件:

echo user xxxxx>> ftpcmd.bat
echo xxxxx>> ftpcmd.bat
echo bin>> ftpcmd.bat
echo hash>> ftpcmd.bat
echo cd download>> ftpcmd.bat
echo get 01_MBytes.txt>> ftpcmd.bat
echo quit>> ftpcmd.bat
ftp -n -s:ftpcmd.bat xxx.xxx.xxx.xxx >> ftp_test.txt
del ftpcmd.bat

Java代码:

Process p = null;
InputStream processOutput;
BufferedReader reader = null;
String line = " ",output = " ";

p = Runtime.getRuntime().exec("cmd /c " + command);
processOutput = p.getInputStream();
reader = new BufferedReader(new InputStreamReader(processOutput));
while(line = reader.readLine()){
    System.out.println(line);
}
output += line + "\n";

输出执行期间:

echo user xxxxx 1>>ftpcmd.bat 
echo xxxxx 1>>ftpcmd.bat 
echo bin 1>>ftpcmd.bat 
echo hash 1>>ftpcmd.bat 
echo cd download 1>>ftpcmd.bat 
echo get 01_MBytes.txt 1>>ftpcmd.bat 
echo quit 1>>ftpcmd.bat 
ftp -n -s:ftpcmd.bat xxx.xxx.xxx.xxx
Hash mark printing On  ftp: (2048 bytes/hash mark) .
user LTETester 
bin
hash
cd download
get 01_MBytes.txt

然后下载完成后(再次,我试图看到它发生):

#####################################################
#####################################################
#####################################################
#####################################################
#####################################################
quit

2 个答案:

答案 0 :(得分:0)

您正在按行读取输出。所以.readLine()只有在ftp.exe输出整行之后才会返回,只有在传输结束后才会返回。

您需要按字节顺序读取流,而不是按行读取。例如。使用.read()

public int read()

答案 1 :(得分:-1)

这与批处理文件无关。

流通常具有READ(numchar)方法以及readlinereadall。无论如何,Basics和Window对象都会这样做。