FTPClient下载文件0kb问题
Posted 语海
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTPClient下载文件0kb问题相关的知识,希望对你有一定的参考价值。
困扰了2天的问题终于解决
错误代码
/**
* @Description: 从ftp服务器下载文件到指定输出流
* @param remotePath,fileName,outputStream FTP服务器上的相对路径,文件名,输出流
* @return 布尔值 成功返回true,异常返回false
* @author Beyond
* @date 2021/6/5 14:34
*/
public static boolean downloadFile(String remotePath, String fileName, OutputStream outputStream) {
boolean result = false;
try {
if (initFtpClient()){
return false;
}
// 转移到FTP服务器目录
ftp.changeWorkingDirectory(remotePath);
// 通知服务器开通给一个端口,防止挂死
ftp.enterLocalPassiveMode();
// 取得指定文件夹下文件列表
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
// 取得指定文件并下载
if (ff.getName().equals(fileName)) {
ftp.enterLocalPassiveMode();
ftp.retrieveFile(remotePath+"/"+fileName,outputStream);
result = true;
}
}
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return result;
}
错误原因
修正后代码
/**
* @Description: 从ftp服务器下载文件到指定输出流
* @param remotePath,fileName,outputStream FTP服务器上的相对路径,文件名,输出流
* @return 布尔值 成功返回true,异常返回false
* @author Beyond
* @date 2021/6/5 14:34
*/
public static boolean downloadFile(String remotePath, String fileName, OutputStream outputStream) {
boolean result = false;
try {
if (initFtpClient()){
return false;
}
// 转移到FTP服务器目录
ftp.changeWorkingDirectory(remotePath);
// 通知服务器开通给一个端口,防止挂死
ftp.enterLocalPassiveMode();
// 取得指定文件夹下文件列表
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
// 取得指定文件并下载
if (ff.getName().equals(fileName)) {
ftp.enterLocalPassiveMode();
ftp.retrieveFile(
new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1),
outputStream);
result = true;
}
}
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return result;
}
附图显示成功后结果
以上是关于FTPClient下载文件0kb问题的主要内容,如果未能解决你的问题,请参考以下文章
org.apache.commons.net.ftp.FTPClient下载中文文件夹乱码如何处理?