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