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();
        }
    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_45057216/article/details/128367504