我有一个将执行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
答案 0 :(得分:0)
您正在按行读取输出。所以.readLine()
只有在ftp.exe
输出整行之后才会返回,只有在传输结束后才会返回。
您需要按字节顺序读取流,而不是按行读取。例如。使用.read()
:
public int read()
答案 1 :(得分:-1)
这与批处理文件无关。
流通常具有READ(numchar)
方法以及readline
和readall
。无论如何,Basics和Window对象都会这样做。