java ftp 正在下载的文件使用后缀.tmp标记,下载完成后使用ftp上的文件名

各位大神,我想实现这样一个功能:使用java语言从ftp上下载文件,正在下载中的文件使用.tmp后缀标记,下载完成后使用.log.gz,ftp上的文件就是.log.gz文件,请问怎么实现,最好有代码。使用字符串拼接,还有下载完成重命名都试过了,不起作用。

感觉像是文件没关闭造成的,你尝试着在fos.flush();后加一个fos.close()看看

这个文件类型没任何关系,应该是你代码问题,你把相关代码先贴一下吧。

别管文件名,下载完成后重命名就行了

private boolean downFileOrDir(String ftpFileName, String localDir) {
boolean flag = true;
try {
File file = new File(ftpFileName);

            File temp = new File(localDir);

            if(!temp.exists()) {
                temp.mkdirs();
            }

            //判断是否是目录
            if(isDir(ftpFileName)) {
                String [] names = ftpClient.listNames();
                for(int i=0; i < names.length; i++) {
                    System.out.println(i+1+":"+names[i]+"++++++");
                    if(isDir(names[i])) {
                        downFileOrDir(ftpFileName+'/'+names[i], localDir + File.separator + names[i].replace("*.", ""));
                        ftpClient.changeToParentDirectory();
                    }else {
                        String filetmp = localDir + File.separator + names[i]+".tmp";
                        String filedone = localDir + File.separator + names[i];
                        File localfile = new File(filetmp);
                        File localfiledone = new File(filedone);
                        if(localfiledone.exists()) {
                            continue;
                        }else if(localfile.exists()){
                            localfile.delete();
                            fos = new FileOutputStream(localfile);
                            ftpClient.retrieveFile(names[i], fos);
                            fos.flush();
                        } else {
                            fos = new FileOutputStream(localfile);
                            ftpClient.retrieveFile(names[i], fos);
                            fos.flush();
                        }
                        boolean b = localfile.renameTo(new File(filedone));
                        System.out.println(b);
                    }
                }
            } else {
                String filetmp = localDir + File.separator + file.getName() +".tmp";
                String filedown = localDir + File.separator + file.getName();
                File localfile = new File(filetmp);
                File localfiledown = new File(filedown);
                if(localfiledown.exists()) {
                    return true;
                } else if(localfile.exists()){
                    logger.debug("开始删除文件");
                    localfile.delete();
                    logger.debug("文件已经删除");
                    fos = new FileOutputStream(localfile);
                    ftpClient.retrieveFile(ftpFileName, fos);
                    fos.flush();
                } else {
                    fos = new FileOutputStream(localfile);
                    ftpClient.retrieveFile(ftpFileName, fos);
                    fos.flush();
                }
                localfile.renameTo(localfiledown);
                ftpClient.changeToParentDirectory();
            }

            logger.info("下载成功!");
        } catch(SocketException e) {
            logger.error("连接失败!", e);
            flag = false;
            return flag;
        }catch (IOException e) {
            logger.error("下载失败!", e);
            flag = false;
            return flag;
    }
    return flag;
}