老师,FTPUtil里面的connectServer方法,是否把异常抛出更合适呢

来源:8-6 后台商品图片的springmvc上传与富文本上传ftp服务器功能开发1

慕哥6062902

2020-06-08

这里如果连接报错,或者登陆失败,我感觉都该把异常抛出去,老师觉得呢。

private boolean connectServer(String ip,int port,String user,String pwd){
    boolean isSuccess = false;
    ftpClient = new FTPClient();
    try {
        ftpClient.connect(ip);
        isSuccess = ftpClient.login(user,pwd);
    } catch (IOException e) {
        logger.error("连接FTP服务器异常",e);
    }
    return isSuccess;
}

同理我觉得这里,也不需要catch,而是直接抛出。只要上传过程中碰到异常,全部抛出,由上层去处理

private boolean uploadFile(String remotePath,List<File> fileList) throws IOException {
   boolean uploaded = true;
   FileInputStream fis = null;
   //连接FTP服务器
   if(connectServer(this.ip,this.port,this.user,this.pwd)){
       try {
           //remotePath如果不传,表示就在当前文件夹下面
           ftpClient.changeWorkingDirectory(remotePath);
           ftpClient.setBufferSize(1024);
           ftpClient.setControlEncoding("UTF-8");
           //指定这个,可以防止一些乱码的事情
           ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
           //之前在FTP服务器上配置的是一个被动模式,并且对外也开放了一个服务的被动端口范围vsftpd的安装章节,
           //这个时候打开本地的被动模式,
           ftpClient.enterLocalPassiveMode();
           for(File fileItem : fileList){
               fis = new FileInputStream(fileItem);
               ftpClient.storeFile(fileItem.getName(),fis);
           }
 
       } catch (IOException e) {
           logger.error("上传文件异常",e);
           uploaded = false;
           e.printStackTrace();
       } finally {
           fis.close();
           ftpClient.disconnect();
       }
   }
   return uploaded;
}
写回答

2回答

geelylucky

2020-06-08

同学,其实异常分很多种,有一些异常是用户输入导致的异常,这个时候一直向上抛出是没有问题的,假如说有一些异常是开发者编码导致的异常,这部分异常本就不应该发生,即使抛出给最终用户也是没有用的,这样的异常就应该及时通知开发者解决:https://www.jianshu.com/p/85fa65bb6d24


0
0

慕哥6062902

提问者

2020-06-09

谢谢老师,这篇文章质量很高,感谢分享,我会慢慢去体会的。我想问的是我们课程里面,因为service层已经做了try catch。如果在上传FTP服务器中出现任何异常,那么返回的文件名都是null。所以我才认为说这个工具类里面是不是可以不捕获了。IOE异常即使捕获,也没法修复,抛出去让service好像更好,只是个人感觉哈

0
1
geelylucky
其实返回null或者抛出去都是可以的,调用者都可以知道上传失败了
2020-06-11
共1条回复

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9476 学习 · 8804 问题

查看课程