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



我有一个将执行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

爪哇代码:

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

您正在按行读取输出。所以自然而然地,.readLine()只有在整条线被ftp.exe输出后才会返回,而只有在传输完成后才会返回。

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

public int read()

这与批处理文件无关。

流通常具有READ(numchar)方法以及readlinereadall。基本和窗口对象仍然会这样做。

最新更新