tank2140896 2013-06-12 18:34
浏览 247
已采纳

这段代码如何重构

有类似这么个代码:
[code="java"]
FTPClient fc = new FTPClient();
try {
fc.connect("127.0.0.1");
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//略去其他
[/code]
在我程序中有类似大量这种try、catch出现,而且每次都要判断一下,如果没有异常就返回true,如果有异常就返回false,同时大多是这种fc.connect("127.0.0.1"),返回的是void类型的,本来想写个方法如:public static boolean xxx(void obj){里面是try、catch和判断},
然后调用如:Test.xxx(fc.connect("127.0.0.1")),然后如果连接成功则返回true,失败则返回false,最后我再根据结果做相应业务处理。
但是参数类型是不能为void的,那么该如何是好啊?如果每次都是try、catch及大量boolean判断,整个代码将相当冗余及逻辑混乱。

  • 写回答

9条回答 默认 最新

  • 「已注销」 2013-06-14 09:22
    关注

    其实楼上都说的是异常处理办法,给你一段代码:
    [code="java"]
    public class DownLoadUtil {

    public static FTPClient open(String url, int port, int connectionTimes, int timeOut, String username, String password) throws IOException {
        FTPClient ftp = new FTPClient();
        ftp.setConnectTimeout(timeOut);
        for (int i = 1;; i++) {
            try {
                ftp.connect(url, port);
                ftp.login(username, password);
                return ftp;
            } catch (IOException e) {
                if (i >= connectionTimes) throw e;
            }
        }
    }
    public static void close(FTPClient ftp) {
        if (ftp != null) {
            try {
                ftp.disconnect();
            } catch (IOException e) {
            }
        }
    }
    public static void downFile(String url, int port, int connectionTimes, int timeOut, String username,
            String password, String remotePath, String fileName, String localPath) throws IOException {
        FTPClient ftp = null;
        try {
            ftp = open(url, port, connectionTimes, timeOut, username, password);
            ftp.changeWorkingDirectory(remotePath);
    
            FTPFile[] fs = ftp.listFiles();
            for (FTPFile ff : fs) {
                String path = remotePath + HandleFileNameUtil.handleFileName(fileName);
                // 判断是否是主服务器文件路径
                if (ff.getName().equals(path)) {
                    // 经过处理后的文件名
                    File localFile = new File(localPath + "/" + HandleFileNameUtil.handleFileName(fileName));
                    try (OutputStream is = new FileOutputStream(localFile)) {
                        ftp.retrieveFile(ff.getName(), is);
                    }
                }
            }
        } finally {
            close(ftp);
        }
    }
    

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行