ftp4j скачать файл размером 0 байт
Я загружаю файл, используя библиотеку ftp4j, его размер составляет 0 байт. Я не получаю исключения. Так что я использую jstack pid, вот фрагмент о ftp.
`"Thread-17" #63 prio=5 os_prio=0 tid=0x0000000021154000 nid=0x2bf0 runnable
[0x00000000275ae000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
- locked <0x000000076e90ca80> (a java.io.InputStreamReader)
at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:127)
- locked <0x000000076e90ca80> (a java.io.InputStreamReader)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:112)
at java.io.InputStreamReader.read(InputStreamReader.java:168)
at it.sauronsoftware.ftp4j.NVTASCIIReader.readLine(NVTASCIIReader.java:105)
at it.sauronsoftware.ftp4j.FTPCommunicationChannel.read(FTPCommunicationChannel.java:142)
at it.sauronsoftware.ftp4j.FTPCommunicationChannel.readFTPReply(FTPCommunicationChannel.java:187)
at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3390)
- locked <0x000000076e074080> (a java.lang.Object)
at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3193)
at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3098)
at com.ron.newgen.ftp.FtpDownloadClienter.download(FtpDownloadClienter.java:60)
at com.ron.newgen.ftp.FtpThread.run(FtpThread.java:56)
- locked <0x000000076e881c28> (a com.ron.newgen.ftp.FtpThread)
at java.lang.Thread.run(Thread.java:745)`
Кажется, что sun.nio.cs.StreamDecoder.read
заблокирован по какой-то причине. Но я не могу понять это. Wireshark
показать последнее сообщение.
ОТПРАВКА ДАННЫХ ЗАКОНЧИЛАСЬ! Ибо если я закрою приложение, файл будет таким же, как на сервере, чем 0 байт.
Я искал здесь, но, кажется, не могу найти тот, который подходит моей проблеме. Просьба рассказать причину и решение.
Вот мой код
public class FtpJob implements org.quartz.Job
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
FtpDownload ftpdownload = new FtpDownload(ftp, -1);
ftpdownload.download();
}
public class FtpDownload(){
......
private FtpDownloadClienter ftp;
public void download() {
try {
ftp.openConnection();
String home = "/home/";
String d1 = "";
d1 = prefix;
String remoteFileName = d1 + ".tar.gz";
for(String p:province){
log.debug(p);
if(!p.equals("jiangsu")){
continue;
}
String remoteFolderPath = home + p +"/" + d1 + "/";
log.info(remoteFolderPath);
String clientpath = "f:\\ftp\\";
log.info(clientpath);
File file = new File(clientpath);
if(!file.isDirectory()){
file.mkdirs();
}
ftp.download(remoteFolderPath, remoteFileName, clientpath);
}
} catch (Exception e) {
log.debug(e.getMessage(), e);
}finally{
ftp.closeConnection();
}
}
}
public class FtpDownloadClienter{
private FTPClient client = new FTPClient();
public void openConnection()throws Exception{
client.connect(ftpHost, ftpPort);
client.login(ftpUser, ftpPasswd);
}
public void download(String remoteFolderPath, String remoteFileName, String localFolderPath) {
try {
client.changeDirectory(remoteFolderPath);
client.setPassive(true);
client.download(remoteFileName, new File(localFolderPath + remoteFileName), new MyTransferListener());
} catch (FTPException e) {
e.printStackTrace();
if(e.getCode() == 550){
System.out.println("File not found : " + remoteFileName );
}
} catch (Exception e) {
e.printStackTrace();
} finally{
log.info("Downloaded" );
}
}
}
Это работает, когда я не инкапсулирую с org.quartz.Job. Но мне нужно запланировать это ftp job
,
Я изменяю некоторые коды, но не работаю, забавный способ работы остается.