通过java代码来下载FTP地址中带中文的文件
2013-02-27 11:27
666 查看
/** * ClassName:FtpUtils * * @author Lishiguang * @version * @since Ver 1.1 * @Date 2013-2-27 上午11:27:03 * * @see */ public class FtpUtils{ /** * downFtpFileForUrl:(通过ftp url 下载ftp文件) * * @param ftpUrl * @return 保存到本地的路径 * @throws Exception */ public static String downFtpFileForUrl(String ftpUrl)throws Exception { String url = "", username = "", password = "", remotePath = "", fileName = "", localPath = ""; int port = 21; // 截取FTP地址 final String ftpFlag = "ftp://"; if (ftpUrl != null && ftpUrl.length() > 0 && ftpUrl.toLowerCase().contains(ftpFlag)) { // 首先去掉FTP final String cutedFtp = ftpUrl.substring(ftpUrl.indexOf(ftpFlag) + ftpFlag.length()); // 首先截取ip和端口 String ipAndPort = ""; if (cutedFtp.indexOf("/") != -1) { ipAndPort = cutedFtp.substring(0, cutedFtp.indexOf("/")); } else { ipAndPort = cutedFtp; } // 开始获取ip和端口 if (!"".equals(ipAndPort)) { if (ipAndPort.indexOf(":") != -1) { url = ipAndPort.substring(0, ipAndPort.indexOf(":")); String strPort = ipAndPort.substring( ipAndPort.indexOf(":") + 1, ipAndPort.length()); if (strPort != null) port = Integer.parseInt(strPort); } else { // 如果没有端口只获取IP url = ipAndPort; } } // 截取ftp文件路径和文件名 String fileNameAndPath = ""; if (cutedFtp.indexOf("/") != -1) { fileNameAndPath = cutedFtp.substring(cutedFtp.indexOf("/") + 1, cutedFtp.length()); } else { fileNameAndPath = ""; } // 开始获取ftp文件路径和文件名 if (!"".equals(ipAndPort)) { if (fileNameAndPath.indexOf("/") != -1) { remotePath = fileNameAndPath.substring(0, fileNameAndPath.lastIndexOf("/")); fileName = fileNameAndPath.substring( fileNameAndPath.lastIndexOf("/") + 1, fileNameAndPath.length()); } else { fileName = fileNameAndPath; } } // 获取本地上传路径 if (!"".equals(fileName)) { localPath = Vutil.getFullFilePath(Constants.FTP_FILE_FLAG,fileName); } // 从配置文件中获取FTP账号密码 String userAndPass = ""; if (type != null && (type == 2 || type == 3)) { userAndPass = Vutil .getPropertieValueForLocal("group_ftp_user_password"); } else { userAndPass = Vutil .getPropertieValueForLocal("local_ftp_user_password"); } // 开始截取FTP账号密码 if (!"".equals(userAndPass)) { if (userAndPass.indexOf(":") != -1) { username = userAndPass.substring(0, userAndPass.indexOf(":")); password = userAndPass.substring( userAndPass.indexOf(":") + 1, userAndPass.length()); } else { username = userAndPass; password = username; } } //开始下载文件 boolean isSuccess=downFtpFile(url, port, username, password, remotePath, fileName, localPath); if(isSuccess) return localPath; } return ""; } /** * Description: 从FTP服务器下载文件 * * @Version1.0 * @param url * FTP服务器hostname * @param port * FTP服务器端口 * @param username * FTP登录账号 * @param password * FTP登录密码 * * @param remotePath * FTP服务器上的相对路径 * * @param fileName * 要下载的文件名 * @param localPath * 下载后保存到本地的路径 * @return */ public static boolean downFtpFile(String url, int port, String username, String password, String remotePath, String fileName, String localPath) { boolean success = false; FTPClient ftp = new FTPClient(); try { int reply; ftp.connect(url, port); // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftp.login(username, password);// 登录 reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return success; } ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录 FTPFile[] fs = ftp.listFiles(); for (FTPFile ff : fs) { String fname = new String(ff.getName().getBytes("iso-8859-1"), "gbk"); if (fname.equals(fileName)) { File localFile = new File(localPath); OutputStream is = new FileOutputStream(localFile); ftp.retrieveFile(ff.getName(), is); is.close(); break; } } ftp.logout(); success = true; } catch (IOException e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return success; } public static void main(String[] args) { final String ftpUrl = "ftp://192.168.0.111:21/test/aa/测试中文.doc"; try { downFtpFileForUrl(ftpUrl); } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- java 两个通过java代码操作FTP的类,上传下载删除,获取文件
- java通过FTP下载文件代码
- java 两个通过java代码操作FTP的类,上传下载删除,获取文件
- JAVA中使用FTPClient实现文件上传下载实例代码
- JAVA 文件下载 通过controller 转到指定地址
- Java通过FTP服务器上传下载文件的解决方案
- java通过内网能下载FTP文件,但是通过外网的话,就下载不了。
- Java代码实现FTP服务器上传文件与下载文件
- JAVA代码实现FTP文件下载
- java 代码之FTP服务器下载文件
- java开发:读取ftp服务器文件通过浏览器下载
- Java 通过URL地址下载文本内容到本地文件中
- JAVA中使用FTPClient实现文件上传下载实例代码
- Java实现FTP文件的上传和下载功能的实例代码
- java通过ftp上传、下载文件,遍历文件目录
- 【转】利用ftpclient下载文件,解决用window.open打开ftp地址中有中文,不能下载的问题
- Java代码实现FTP文件下载
- apache 的 commons-net-3.3.jar 的 ftp java代码上传下载文件
- FTP方式的文件上传和下载的Java代码
- JAVA代码实现FTP文件下载