qq_37257738
TaroLee
2018-05-14 01:37
采纳率: 37.5%
浏览 1.8k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • tang_cheng
    tang_cheng 2018-05-14 02:44
    已采纳

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

    点赞 评论
  • tang_cheng
    tang_cheng 2018-05-14 01:51

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

    点赞 评论
  • tingyux
    tingyux 2018-05-14 02:03

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

    点赞 评论
  • qq_37257738
    TaroLee 2018-05-14 02:22

    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;
    }
    
    点赞 评论

相关推荐