emote.substring(0,remote.lastIndexOf("/")+1); if(!directory.equalsIgnoreCase("/")&&!ftpClient.changeWorkingDirectory(directory)){ //如果远程目录不存在,则递归创建远程服务器目录 int start=0; int end = 0; if(directory.startsWith("/")){ start = 1; }else{ start = 0; } end = directory.indexOf("/",start); while(true){ String subDirectory = remote.substring(start,end); if(!ftpClient.changeWorkingDirectory(subDirectory)){ if(ftpClient.makeDirectory(subDirectory)){ ftpClient.changeWorkingDirectory(subDirectory); }else { System.out.println("创建目录失败"); return UploadStatus.Create_Directory_Fail; } } start = end + 1; end = directory.indexOf("/",start); //检查所有目录是否创建完毕 if(end <= start){ break; } } } } //检查远程是否存在文件 FTPFile[] files = ftpClient.listFiles(remoteFileName); if(files.length == 1){ long remoteSize = files[0].getSize(); File f = new File(local); long localSize = f.length(); if(remoteSize==localSize){ return UploadStatus.File_Exits; }else if(remoteSize > localSize){ return UploadStatus.Remote_Bigger_Local; } //尝试移动文件内读取指针,实现断点续传 InputStream is = new FileInputStream(f); if(is.skip(remoteSize)==remoteSize){ ftpClient.setRestartOffset(remoteSize); if(ftpClient.storeFile(remote, is)){ return UploadStatus.Upload_From_Break_Success; } } //如果断点续传没有成功,则删除服务器上文件,重新上传 if(!ftpClient.deleteFile(remoteFileName)){ return UploadStatus.Delete_Remote_Faild; } is = new FileInputStream(f); if(ftpClient.storeFile(remote, is)){ result = UploadStatus.Upload_New_File_Success; }else{ result = UploadStatus.Upload_New_File_Failed; } is.close(); }else { InputStream is = new FileInputStream(local); if(ftpClient.storeFile(remoteFileName, is)){ result = UploadStatus.Upload_New_File_Success; }else{ result = UploadStatus.Upload_New_File_Failed; } is.close(); } return result; } /** * 断开与远程服务器的连接 * @throws IOException */ public void disconnect() throws IOException{ if(ftpClient.isConnected()){ ftpClient.disconnect(); } } public static void main(String[] args) { ContinueFTP myFtp = new Con |