java FTP下载文件在代码中如何实现知道下载完成?
发布网友
发布时间:2022-05-01 21:51
我来回答
共2个回答
热心网友
时间:2022-06-24 00:27
public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
try {
TelnetInputStream in = ftpClient.get(fileName);
byte[] bytes = new byte[1024];
int cnt=0;
while ((cnt=in.read(bytes,0,bytes.length)) != -1) {
outputStream.write(bytes, 0, cnt);
}
//##############################################
//这里文件就已经下载完了,自己理解一下
//#############################################
outputStream.close();
in.close();
} catch (Exception e) {
ftpClient.closeServer();
e.printStackTrace();
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("下载文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
}
热心网友
时间:2022-06-24 00:27
你好,可以写个方法,这个方法返回一个boolean类型,只要返回true,就说明已经完成,
具体如下:一般get过程完成后,为出错就说明文件已经下载完成。
public boolean downloadFile(String hostname, int port,String username, String password, String remotePath,String remoteFilename, String savePath) {
long start=System.currentTimeMillis();
log.info("开始登陆SSH服务器"+hostname);
try {
if (sftp==null||!sftp.isConnected())
sftp=login(hostname, port, username, password);
if (sftp!=null&&session.isConnected()&&channel!=null&&channel.isConnected()&&session!=null&&session.isConnected()) {
log.info("登陆成功,开始转换到文件目录:"+remotePath);
if (remotePath !=null&&!remotePath.trim().equals(""))
{
sftp.cd(remotePath);
File dir = new File(savePath);
if (!dir.exists())
dir.mkdirs();
sftp.get(remoteFilename, savePath+remoteFilename);
log.info("成功从服务器上获取文件:"+remoteFilename+",耗时(秒):"+(System.currentTimeMillis()-start)/1000);
return true;
}
else
{
log.error("登陆失败:文件目录转换异常");
return false;
}
}
else
{
log.error("登陆失败:连接=null");
return false;
}
} catch (SftpException e) {
log.error("接收文件"+remoteFilename+"时有SftpException异常【可能文件不存在】!");
return false;
}
catch(Exception ex)
{
log.error("接收文件"+remoteFilename+"时有Exception异常:"+ex.getMessage());
return false;
}catch(Throwable t)
{
log.error("接收文件"+remoteFilename+"时有Throwable异常:"+t.getMessage());
return false;
}finally
{
close();
}
}