【发布时间】:2011-01-19 02:29:33
【问题描述】:
我正在尝试将文件从我的 Java 应用程序传输到 FTP 服务器 程序正常工作,文件被传输,但是当我在 FTO 文件夹中打开时,文件已损坏,我认为在文件传输过程中数据包丢失。为什么?我该如何解决这个问题?
另一个问题,如果我想停止文件上传,如何停止while?
谢谢大家!
我班里的代码:
FTPClient client = new FTPClient();
InputStream is = null;
//...
try{
client.connect(MY_FTP_URL);
client.login(USER, PASS);
InputStream is = new FileInputStream(file_path);
OutputStream os = client.storeFileStream(file_name);
byte[] buffer = new byte[1024];
int len;
//I use this way to check the transfer progress
while((len = is.read(buffer)) != -1){
os.write(buffer, 0, len);
os.flush();
}
os.close();
} catch (IOException e){
e.printStackTrace();
} finally{
try{
if(is != null){
is.close();
}
client.disconnect();
} catch(IOException e){
e.printStackTrace();
}
}
【问题讨论】:
-
(1) 不要自己编写,使用库 (2) 除非绝对必要,否则不要使用 FTP,而是使用 SCP via JSch。
-
不确定您的问题是什么,但几乎可以肯定不是“丢包” - FTP 位于 TCP 之上,提供可靠的字节流。
-
是的,这真的很奇怪,但输出文件包含的字符或行较少..(并且没有修剪)
-
您使用的是什么操作系统?服务器运行的是什么操作系统?这可能是二进制文件传输的问题。
-
如果您真的怀疑网络层,您可以使用 Wireshark 捕获您通过网络发送的数据。但是,除非您有充分的理由不这么认为,否则始终假定错误是您自己的代码是一个很好的一般规则。
标签: java ftp ftp-client apache-commons-net