转https://blog.csdn.net/dhu86380/article/details/102064930
http://www.linuxidc.com/Linux/2014-10/107585.htm
传输编码必须为 ISO-8859-1
内容编码根据服务器支持匹配


最近在做文件服务器的相关东西,在原有的磁盘存储的基础上,增加了Ftp的存储方式,客户端选用的是Apache的FtpClient。  今天在测试的时候,发现中文的路径后者文件名不支持,查阅了相关资料后终于找到了解决的方法。
  使用类:
           org.apache.commons.net.ftp.FTPClient
   问题描述:
           创建中文目录、上传中文文件名时,目录名及文件名中的中文显示乱码
   解决方法:
           在网上Google了一些资料, FTP协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码。
            所以网上很多人的解决方法为: 
                  将中文的目录或文件名转为iso-8859-1编码的字符。参考代码:
                  String name=”目录名或文件名”;
                  name=new String(name.getBytes(“GBK”),”iso-8859-1”);
           很多人改为上述操作后,发现上传后中文不再乱码了,就以为解决了问题
           还有人处理方法为:
                 ftpClient.setControlEncoding(“GBK”);
                 FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
                 conf.setServerLanguageCode(“zh”);  
           上述的处理方法,我都试过,发现在我自己搭建的FTP服务器上,上传的文件中文是正常的,不是乱码,我当时以为中文问题就解决了,但是测试部的同事在将文件上传到他们搭建的FTP服务器上时,文件中文路径仍然是乱码,所以上述的解决方法是错误的。 
          上面的方法之所以错误的原因是因为是没有考虑ftp服务器的编码格式。我搭建的Ftp服务器(windows2003 server)支持GBK编码方式,所以上述的解决方法可以,但是测试部的同事搭建的Ftp服务器(serv-u)是支持UTF-8格式的,所以此时在客户端的编码方式是GBK的,而搭设的ftp服务器中的设置就已经是utf-8的编码,所以肯定还是会出现乱码的问题。
         那么正确的解决方法时是什么呢,我们可以仿照FlashFXP、FileZilla等ftp 客户端连接工具,看看他们是如何实现的,下面的两张图就是FileZilla的配置信息和连接时的命令信息。
图1:FileZilla配置信息
<br /> **图2:FileZilla连接时信息**<br />**从图2中我们可以看到原来它向服务器发送了OPTS UTF8 ON命令,来开启服务器对UTF-8的支持。所以我们也可以仿照**FileZilla**那样向服务器发送该命令。如果服务器支持UTF-8我们就用UTTF-8,否则我们就用本地编码(GBK)来处理中文文件名。**<br />**下面是Java代码:**<br />/** 本地字符编码 */<br />private static String LOCAL_CHARSET = "GBK";<br /> <br />// FTP协议里面,规定文件名编码为iso-8859-1<br />private static String SERVER_CHARSET = "ISO-8859-1";<br /> <br />private void connectFtpServer() {<br />if (ftpClient == null) {<br />ftpClient = new FTPClient();<br />}<br />if (ftpClient.isConnected()) {<br />return;<br />}<br />String host = getConfigValue(ADDRESS);<br />int port = Integer.valueOf(getConfigValue(PORT));<br />String user = getConfigValue(USER);<br />String password = getConfigValue(PASSWORD);<br />try {<br />ftpClient.connect(host, port);<br />if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {<br />if (ftpClient.login(user, password)) {<br />if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(<br />"OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).<br />LOCAL_CHARSET = "UTF-8";<br />}<br />ftpClient.setControlEncoding(LOCAL_CHARSET);<br />ftpClient.enterLocalPassiveMode();// 设置被动模式<br />ftpClient.setFileType(getTransforModule());// 设置传输的模式<br />return;<br />} else {<br />throw new FileStorageException(<br />"Connet ftpServer error! Please check user or password");<br />}<br />}<br />} catch (IOException e) {<br />disConnectServer();<br />throw new FileStorageException(<br />"Connet ftpServer error! Please check the Configuration");<br />}<br />}<br />上传文件时,文件名称需要做编码转换<br />fileName = new String(fileName.getBytes(LOCAL_CHARSET),<br />SERVER_CHARSET);<br />通过上述方法,就能解决了中文乱码的问题。
package com.toyor.utils;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import javax.servlet.http.HttpServletRequest;
import java.io.;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Arrays;
*import java.util.List;
public class FtpUtil {
    //qzf ftp
   private static String ueditorDir = “ueditor”;
   private static String localCharSet = “GBK”;
   private static String serverCharSet = “ISO-8859-1”;
   /*
     获取FTPClient对象
    
     @param ftpHost     FTP主机服务器
    * @param ftpPassword FTP 登录密码
    * @param ftpUserName FTP登录用户名
    * @param ftpPort     FTP端口 默认为21
    * @return
    */
   public static FTPClient getFTPClient(String ftpHost, String ftpUserName,
                               String ftpPassword, int ftpPort) {
      FTPClient ftpClient = new FTPClient();
      try {
         ftpClient = new FTPClient();
         ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
         _ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
         if (!FTPReply._isPositiveCompletion(ftpClient.getReplyCode())) {
            System.out.println(“未连接到FTP,用户名或密码错误。”);
            ftpClient.disconnect();
         } else {
            System.out.println(“FTP连接成功。”);
         }
      } catch (SocketException e) {
         e.printStackTrace();
         System.out.println(“FTP的IP地址可能错误,请正确配置。”);
      } catch (IOException e) {
         e.printStackTrace();
         System.out.println(“FTP的端口错误,请正确配置。”);
      }
      return ftpClient;
   }
   public static FTPClient getFTPClient() {
      String ftpHost = SystemConfigUtil.getProperty(“imgFtpIp”);
      String ftpPort = SystemConfigUtil.getProperty(“imgFtpPort”);
      String ftpUserName = SystemConfigUtil.getProperty(“imgFtpUserName”);
      String ftpPassword = SystemConfigUtil.getProperty(“imgFtpPwd”);
      return  getFTPClient(ftpHost, ftpUserName, ftpPassword, Integer.valueOf(ftpPort));
   }
   /
     从FTP服务器下载文件    
     @param ftpHost FTP IP地址    * @param ftpUserName FTP 用户名     @param ftpPassword FTP用户名密码_     @param ftpPort FTP端口     @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
     @param localPath 下载到本地的位置 格式:H:/download
    * @param fileName 文件名称    /
   _public static void downloadFtpFile(String ftpHost, String ftpUserName,
                              String ftpPassword, *int ftpPort, String ftpPath, String localPath,
                              String fileName) {
FTPClient ftpClient = **null**;**try **{<br /> ftpClient = _getFTPClient_(ftpHost, ftpUserName, ftpPassword, ftpPort);<br /> ftpClient.setControlEncoding(**"UTF-8"**); _// 中文支持<br /> _ftpClient.setFileType(FTPClient.**BINARY_FILE_TYPE**);<br /> ftpClient.enterLocalPassiveMode();<br /> ftpClient.changeWorkingDirectory(ftpPath);File localFile = **new **File(localPath + File.**separatorChar **+ fileName);<br /> OutputStream os = **new **FileOutputStream(localFile);<br /> ftpClient.retrieveFile(fileName, os);<br /> os.close();<br /> ftpClient.logout();} **catch **(FileNotFoundException e) {<br /> System.**out**.println(**"没有找到" **+ ftpPath + **"文件"**);<br /> e.printStackTrace();<br /> } **catch **(SocketException e) {<br /> System.**out**.println(**"连接FTP失败."**);<br /> e.printStackTrace();<br /> } **catch **(IOException e) {<br /> e.printStackTrace();<br /> System.**out**.println(**"文件读取错误。"**);<br /> e.printStackTrace();<br /> }
}
   /*
     Description: 向FTP服务器上传文件
    * @param ftpHost FTP服务器hostname
    * @param ftpUserName 账号
    * @param ftpPassword 密码
    * @param ftpPort 端口
    * @param ftpPath  FTP服务器中文件所在路径 格式: ftptest/aa
    * @param fileName ftp文件名称
    * @param input 文件流
    * @return 成功返回true,否则返回false
    */
   public static boolean uploadFile(String ftpHost, String ftpUserName,
                            String ftpPassword, int ftpPort, String ftpPath,
                            String fileName,InputStream input) {
      boolean success = false;
      FTPClient ftpClient = null;
      try {
         int reply;
         ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
         reply = ftpClient.getReplyCode();
         if (!FTPReply.isPositiveCompletion(reply)) {
            ftpClient.disconnect();
            return success;
         }
         if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
               “OPTS UTF8”, “ON”))) {
            localCharSet = “UTF-8”;
         }
         ftpClient.setControlEncoding(localCharSet);
         ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
         ftpClient.enterLocalPassiveMode();
         if (!ftpClient.changeWorkingDirectory(ftpPath)) {
            //如果目录不存在创建目录
            _String[] dirs = ftpPath.split(“/“);
            String tempPath = “”;
            for (String dir : dirs) {
               if (null == dir || “”.equals(dir)) continue;
               //tempPath += “/“ + dir;
               tempPath =  dir ;
               tempPath = new String(tempPath.getBytes(_localCharSet),serverCharSet);
               if (!ftpClient.changeWorkingDirectory(tempPath)) {
                  if (!ftpClient.makeDirectory(tempPath)) {
                     return success;
                  } else {
                     ftpClient.changeWorkingDirectory(tempPath);
                  }
               }
            }
         }
         fileName = new String(fileName.getBytes(localCharSet),serverCharSet);
         
         ftpClient.storeFile(fileName, input);
input.close();<br /> ftpClient.logout();<br /> success = **true**;<br /> } **catch **(IOException e) {<br /> e.printStackTrace();<br /> } **finally **{<br /> **if **(ftpClient.isConnected()) {<br /> **try **{<br /> ftpClient.disconnect();<br /> } **catch **(IOException ioe) {<br /> }<br /> }<br /> }<br /> **return **success;<br /> }<br /> _//上传图片(web MultipartFile 上传)<br /> _**public static boolean **uploadFileMultiPart(String toyorno, String pathKey, String fileName,InputStream input) {<br /> String imgFtpUpload = SystemConfigUtil._getProperty_(**"imgFtpUpload"**);<br /> _//String ftpPath = imgFtpUpload + "/"+ toyorno+"/"+(new ImgFilePath()).getProperty(pathKey); // del by lance<br /> _String ftpPath = imgFtpUpload + toyorno+**"/"**+(**new **ImgFilePath()).getProperty(pathKey); _// add by lance<br /> _**boolean **success = **false**;<br /> FTPClient ftpClient = **null**;<br /> **try **{<br /> **int **reply;<br /> ftpClient = _getFTPClient_();<br /> reply = ftpClient.getReplyCode();<br /> **if **(!FTPReply._isPositiveCompletion_(reply)) {<br /> ftpClient.disconnect();<br /> **return **success;<br /> }<br /> **if **(FTPReply._isPositiveCompletion_(ftpClient.sendCommand(<br /> **"OPTS UTF8"**, **"ON"**))) {<br /> _localCharSet _= **"UTF-8"**;<br /> }<br /> ftpClient.setControlEncoding(_localCharSet_);<br /> ftpClient.setFileType(FTPClient.**BINARY_FILE_TYPE**);<br /> ftpClient.enterLocalPassiveMode();<br /> **if **(!ftpClient.changeWorkingDirectory(ftpPath)) {<br /> _//如果目录不存在创建目录<br /> _String[] dirs = ftpPath.split(**"/"**);<br /> String tempPath = **""**;<br /> **for **(String dir : dirs) {<br /> **if **(**null **== dir || **""**.equals(dir)) **continue**;<br /> _//tempPath += "/" + dir;<br /> _tempPath = dir ;<br /> tempPath = **new **String(tempPath.getBytes(_localCharSet_),_serverCharSet_);<br /> **if **(!ftpClient.changeWorkingDirectory(tempPath)) {<br /> **if **(!ftpClient.makeDirectory(tempPath)) {<br /> **return **success;<br /> } **else **{<br /> ftpClient.changeWorkingDirectory(tempPath);<br /> }<br /> }<br /> }<br /> }<br /> fileName = **new **String(fileName.getBytes(_localCharSet_),_serverCharSet_);<br /> ftpClient.storeFile(fileName, input);<br /> input.close();<br /> ftpClient.logout();<br /> success = **true**;<br /> } **catch **(IOException e) {<br /> e.printStackTrace();<br /> } **finally **{<br /> **if **(ftpClient.isConnected()) {<br /> **try **{<br /> ftpClient.disconnect();<br /> } **catch **(IOException ioe) {<br /> }<br /> }<br /> }<br /> **return **success;<br /> }<br /> _//上传图片(手机先上传临时文件,再上传ftp)<br /> _**public static boolean **uploadFileMobile(String pathKey , String fileName, HttpServletRequest request) {<br /> **if**(StringUtils._isEmpty_(fileName)) **return false**;<br /> String tempDir = (**new **ImgFilePath()).getProperty(**"temp"**).trim();<br /> **if**(StringUtils._isNotEmpty_(tempDir) && !tempDir.endsWith(**"/"**)){<br /> tempDir += **"/"**;<br /> }<br /> String tmpFileName = tempDir + fileName;<br /> File tmpFile = **new **File(tmpFileName);<br /> **if**(!tmpFile.exists()) **return false**;<br /> String toyorno = RequestHolder._getToyorno_();String imgFtpUpload = SystemConfigUtil._getProperty_(**"imgFtpUpload"**);<br /> String ftpPath = imgFtpUpload + **"/"**+ toyorno+**"/"**+(**new **ImgFilePath()).getProperty(pathKey);<br /> **boolean **success = **false**;<br /> FTPClient ftpClient = **null**;<br /> **try **{<br /> **int **reply;<br /> ftpClient = _getFTPClient_();<br /> reply = ftpClient.getReplyCode();<br /> **if **(!FTPReply._isPositiveCompletion_(reply)) {<br /> ftpClient.disconnect();<br /> **return **success;<br /> }<br /> **if **(FTPReply._isPositiveCompletion_(ftpClient.sendCommand(<br /> **"OPTS UTF8"**, **"ON"**))) {<br /> _localCharSet _= **"UTF-8"**;<br /> }<br /> ftpClient.setControlEncoding(_localCharSet_);<br /> ftpClient.setFileType(FTPClient.**BINARY_FILE_TYPE**);<br /> ftpClient.enterLocalPassiveMode();<br /> **if **(!ftpClient.changeWorkingDirectory(ftpPath)) {<br /> _//如果目录不存在创建目录<br /> _String[] dirs = ftpPath.split(**"/"**);<br /> String tempPath = **""**;<br /> **for **(String dir : dirs) {<br /> **if **(**null **== dir || **""**.equals(dir)) **continue**;<br /> _//tempPath += "/" + dir;<br /> _tempPath = dir ;<br /> tempPath = **new **String(tempPath.getBytes(_localCharSet_),_serverCharSet_);<br /> **if **(!ftpClient.changeWorkingDirectory(tempPath)) {<br /> **if **(!ftpClient.makeDirectory(tempPath)) {<br /> **return **success;<br /> } **else **{<br /> ftpClient.changeWorkingDirectory(tempPath);<br /> }<br /> }<br /> }<br /> }FileInputStream input = **new **FileInputStream(tmpFile);fileName = **new **String(fileName.getBytes(_localCharSet_),_serverCharSet_);<br /> ftpClient.storeFile(fileName, input);<br /> input.close();<br /> ftpClient.logout();<br /> tmpFile.delete();<br /> success = **true**;<br /> } **catch **(IOException e) {<br /> e.printStackTrace();<br /> } **finally **{<br /> **if **(ftpClient.isConnected()) {<br /> **try **{<br /> ftpClient.disconnect();<br /> } **catch **(IOException ioe) {<br /> }<br /> }<br /> }<br /> **return **success;<br /> }<br /> _//上传图片(ueditor上传后,再上传ftp)<br /> _**public static **String uploadFileUeditor(String rootPath,String result, HttpServletRequest request) {<br /> JSONObject jsonObject = **null**;<br /> **try **{<br /> jsonObject = JSONObject._fromObject_(result);<br /> }<br /> **catch **(Exception e){<br /> System.**out**.println(e.getMessage());<br /> }<br /> **if**(jsonObject == **null**){<br /> System.**out**.println(**"ueditor上传出错!"**);<br /> **return ""**;<br /> }<br /> String imgtype = request.getParameter(**"imgtype"**);<br /> String keyno = request.getParameter(**"keyno"**);<br /> String action = request.getParameter(**"action"**);<br /> _//ftp 上传相对路径(toyorno的子目录)<br /> _String path = _ueditorDir_+**"/"**+imgtype+**"/"**+keyno+**"/"**;<br /> _//ueditor上传的图片全路径<br /> _String ueditorFullFileName = rootPath + jsonObject.get(**"url"**).toString().substring(1);String toyorno = RequestHolder._getToyorno_();<br /> **if**(StringUtils._isEmpty_(toyorno)){<br /> System.**out**.println(**"上传出错,toyorno不能为空!"**);<br /> **return ""**;<br /> }<br /> **if**(StringUtils._isEmpty_(keyno)){<br /> System.**out**.println(**"上传出错,keyno不能为空!"**);<br /> **return ""**;<br /> }<br /> String imgFtpUpload = SystemConfigUtil._getProperty_(**"imgFtpUpload"**);<br /> String ftpPath = imgFtpUpload + **"/"**+ toyorno+**"/"**+path;<br /> **boolean **success = **false**;<br /> FTPClient ftpClient = **null**;<br /> **try **{<br /> **int **reply;<br /> ftpClient = _getFTPClient_();<br /> reply = ftpClient.getReplyCode();<br /> **if **(!FTPReply._isPositiveCompletion_(reply)) {<br /> ftpClient.disconnect();<br /> **return ""**;<br /> }<br /> **if **(FTPReply._isPositiveCompletion_(ftpClient.sendCommand(<br /> **"OPTS UTF8"**, **"ON"**))) {<br /> _localCharSet _= **"UTF-8"**;<br /> }<br /> ftpClient.setControlEncoding(_localCharSet_);<br /> ftpClient.setFileType(FTPClient.**BINARY_FILE_TYPE**);<br /> ftpClient.enterLocalPassiveMode();<br /> **if **(!ftpClient.changeWorkingDirectory(ftpPath)) {<br /> _//如果目录不存在创建目录<br /> _String[] dirs = ftpPath.split(**"/"**);<br /> String tempPath = **""**;<br /> **for **(String dir : dirs) {<br /> **if **(**null **== dir || **""**.equals(dir)) **continue**;<br /> _//tempPath += "/" + dir;<br /> _tempPath = dir ;<br /> tempPath = **new **String(tempPath.getBytes(_localCharSet_),_serverCharSet_);<br /> **if **(!ftpClient.changeWorkingDirectory(tempPath)) {<br /> **if **(!ftpClient.makeDirectory(tempPath)) {<br /> **return ""**;<br /> } **else **{<br /> ftpClient.changeWorkingDirectory(tempPath);<br /> }<br /> }<br /> }<br /> }String tmpFileName = ueditorFullFileName;<br /> File tmpFile = **new **File(tmpFileName);<br /> FileInputStream input = **new **FileInputStream(tmpFile);ftpClient.storeFile(**new **String(tmpFile.getName().getBytes(_localCharSet_),_serverCharSet_), input);<br /> input.close();<br /> ftpClient.logout();<br /> tmpFile.delete();<br /> success = **true**;<br /> jsonObject.put(**"url"**, SystemConfigUtil._getProperty_(**"imgHttpServer"**).replace(SystemConfigUtil._getProperty_(**"imgFtpUpload"**),**""**) +ftpPath+tmpFile.getName());} **catch **(IOException e) {<br /> e.printStackTrace();<br /> } **finally **{<br /> **if **(ftpClient.isConnected()) {<br /> **try **{<br /> ftpClient.disconnect();<br /> } **catch **(IOException ioe) {<br /> }<br /> }<br /> }<br /> **return **jsonObject.toString();<br /> }<br /> _/**<br /> * 返回FTP目录下的文件列表<br /> * _**@param ftpDirectory<br /> **_* _**@return<br /> **_*/<br /> _**public static **List<String> getFileNameList(String ftpDirectory)<br /> {<br /> List<String> list = **new **ArrayList<String>();<br /> **int **reply;<br /> FTPClient ftpClient = _getFTPClient_();<br /> **try **{<br /> reply = ftpClient.getReplyCode();<br /> **if **(!FTPReply._isPositiveCompletion_(reply)) {<br /> ftpClient.disconnect();<br /> **return **list;<br /> }<br /> **try **{<br /> String[] listNames = ftpClient.listNames(ftpDirectory);<br /> list = Arrays._asList_(listNames);<br /> } **catch **(Exception e) {<br /> e.printStackTrace();<br /> }<br /> }**catch **(Exception e){}<br /> **return **list;<br /> }<br /> **public static **String getFileNameListForUeditor(HttpServletRequest request)<br /> {<br /> String imgtype = request.getParameter(**"imgtype"**);<br /> String keyno = request.getParameter(**"keyno"**);<br /> String action = request.getParameter(**"action"**);String ftpDirectory = SystemConfigUtil._getProperty_(**"imgFtpUpload"**)+ RequestHolder._getToyorno_()+**"/"**+_ueditorDir_+**"/"**+imgtype+**"/"**+keyno+**"/"**;<br /> List<String> list = _getFileNameList_(ftpDirectory);<br /> **if**(list.size()<=0) **return ""**;<br /> JSONObject jsonObjectResult = **new **JSONObject();<br /> jsonObjectResult.put(**"state"**,**"SUCCESS"**);<br /> jsonObjectResult.put(**"total"**,list.size());<br /> jsonObjectResult.put(**"start"**,0);<br /> JSONArray listfile = **new **JSONArray();<br /> **for**(String filename :list){<br /> JSONObject jsonObject = **new **JSONObject();<br /> jsonObject.put(**"state"**,**"SUCCESS"**);<br /> jsonObject.put(**"url"**, SystemConfigUtil._getProperty_(**"imgHttpServer"**).replace(SystemConfigUtil._getProperty_(**"imgFtpUpload"**),**""**) + filename);<br /> listfile.add(jsonObject);<br /> }<br /> jsonObjectResult.put(**"list"**,listfile);<br /> **return **jsonObjectResult.toString();<br /> }<br /> _//Ueditor<br />_ //删除ftp文件<br /> _**public static boolean **deleteFile(String pathKey , String fileName) {<br /> **if**(StringUtils._isEmpty_(fileName)) **return false**;<br /> String toyorno = RequestHolder._getToyorno_();<br /> String imgFtpUpload = SystemConfigUtil._getProperty_(**"imgFtpUpload"**);<br /> String ftpPath = imgFtpUpload + **"/"**+ toyorno+**"/"**+(**new **ImgFilePath()).getProperty(pathKey);<br /> **boolean **flag = **false**;<br /> FTPClient ftpClient = **null**;<br /> **try **{<br /> **int **reply;<br /> ftpClient = _getFTPClient_();<br /> reply = ftpClient.getReplyCode();<br /> **if **(!FTPReply._isPositiveCompletion_(reply)) {<br /> ftpClient.disconnect();<br /> **return false**;<br /> }<br /> **if **(FTPReply._isPositiveCompletion_(ftpClient.sendCommand(<br /> **"OPTS UTF8"**, **"ON"**))) {<br /> _localCharSet _= **"UTF-8"**;<br /> }<br /> ftpClient.setControlEncoding(_localCharSet_);<br /> _// 切换FTP目录<br /> _ftpClient.changeWorkingDirectory(ftpPath);<br /> fileName = **new **String(fileName.getBytes(_localCharSet_),_serverCharSet_);<br /> ftpClient.dele(fileName);<br /> ftpClient.logout();<br /> flag = **true**;<br /> System.**out**.println(**"删除文件成功"**);<br /> } **catch **(Exception e) {<br /> System.**out**.println(**"删除文件失败"**);<br /> e.printStackTrace();<br /> } **finally **{<br /> **if **(ftpClient.isConnected()) {<br /> **try **{<br /> ftpClient.disconnect();<br /> } **catch **(IOException e) {<br /> e.printStackTrace();<br /> }<br /> }<br /> }<br /> **return **flag;<br /> }<br />}
