ftpClient.listFiles获取Linux中文文件名乱码与删除文件夹内所有文件操作

ftpClient.listFiles获取Linux中文文件名乱码与删除文件夹内所有文件操作

    /**
     *
     * @todo连接到FTP服务器
     * @param hostname 主机名
     * @param port     端口
     * @param username 用户名
     * @param password 密码
     * @return 是否连接成功
     * @throws IOException
     *
     */
    public boolean connect(String hostname, int port, String username, String password) throws IOException {
        ftpClient.connect(hostname, port);
        //ftpClient.setControlEncoding("GBK");

        /**
         *        String charset = "gbk";
       			 if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {
            		// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码GBK
           			charset = "utf-8";
        			}
       			 ftpClient.setControlEncoding(charset);
         * 这里解决了FTP.listfiles()获取到的中文文件名乱码问题,不解决,递归读取子目录时切换不了
         * */
        String charset = "gbk";
        if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {
            // 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码GBK
            charset = "utf-8";
        }
        ftpClient.setControlEncoding(charset);


        if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
            if (ftpClient.login(username, password)) {
                return true;
            }
        }
        disconnect();
        return false;
    }
    /**
     * 删除Ftp上的文件夹 包括其中的文件 <功能详细描述>
     *
     * file.getName()解决不乱码,
     *
     *
     * pathName + "/" + file.getName()递归传入前要为未更改编码状态。
     * 其余删除,切换目录等操作都为更改编码
     */
    public void deleteDirectory(String pathName) {
        try {
            FTPFile[] files = ftpClient.listFiles(new String(pathName.getBytes("utf-8"),"iso-8859-1"));
            if (null != files && files.length > 0) {
                for (FTPFile file : files) {
                    if (file.isDirectory()) {
                        deleteDirectory(pathName + "/" + file.getName());
                    } else {
                        String path = pathName + "/" + file.getName();
                        if (!ftpClient.deleteFile(new String(path.getBytes("utf-8"),"iso-8859-1") )) {
                            System.out.println("文件未删除: "+ path);
                        }
                    }
                }
            }
            // 切换到父目录,不然删不掉文件夹
            ftpClient.changeWorkingDirectory(new String(pathName.substring(0, pathName.lastIndexOf("/")).getBytes("utf-8"), "iso-8859-1"));
            System.out.println(ftpClient.removeDirectory(new String(pathName.getBytes("utf-8"),"iso-8859-1")));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值