`

利用commons-net包实现ftp上传下载例子

    博客分类:
  • Java
阅读更多

 

下载文件的时候注意一下,第一个参数要用iso-8859_1编码的,否则文件大小等于0!

直接贴图代码了:

 

package ftp2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.SocketException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

/**
 * 使用commons的net包进行ftp链接. 相关包:commons-net-1.4.1.jar ;
 * commons-io-1.2.jar;jakarta-oro-2.0.8.jar测试通过.可以列出ftp上的文件
 * 通过把ftp服务器上的文件流连接到outSteam及可以把文件下载到本机的目录..限制如果目录为中文则需要处理.最好使用英文文件名
 * 
 */
public class ListFtpFile {

	private FTPClient ftpClient = new FTPClient();

	private OutputStream outSteam = null;

	/**
	 * ftp服务器地址
	 */
	private String hostName = "192.168.0.2";
	private int port = 212;

	/**
	 * 登录名
	 */
	private String userName = "anonymous";//匿名登录

	/**
	 * 登录密码
	 */
	private String password = "121@hotmail.com";//随便一个地址

	/**
	 * 需要访问的远程目录
	 */
	private String remoteDir = "/software/dreamweaver/";

	/**
	 * 下载
	 */
	private void download() {
		try {
			// 链接到ftp服务器
			ftpClient.connect(hostName,port);
			System.out.println("连接到ftp服务器:" + hostName + " 成功..开始登录");
			// 登录.用户名 密码
			boolean b = ftpClient.login(userName, password);
			System.out.println("登录成功." + b);
			
//			检测连接是否成功
			int reply = ftpClient.getReplyCode();
			if(!FTPReply.isPositiveCompletion(reply)) {
				ftpClient.disconnect();
				System.err.println("FTP server refused connection.");
				System.exit(1);
			}
			
			ftpClient.setControlEncoding("GBK");
			FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);  
			conf.setServerLanguageCode("zh"); 
			FTPFile[] remoteFiles = ftpClient.listFiles(remoteDir);
			if (remoteFiles != null) {
				for (int i = 0; i < remoteFiles.length; i++) {
					String name = remoteFiles[i].getName();
					
					//下载
					File localFile = new File("c:/001/ftp/" + name);
					OutputStream is = new FileOutputStream(localFile);
					//retrieveFile的第一个参数需要是 ISO-8859-1 编码,并且必须是完整路径!
					String fileName = remoteDir + name;
					ftpClient.retrieveFile(new String(fileName.getBytes("GBK"),"ISO-8859-1"), is);
					is.close();
					
					//打印
					long length = remoteFiles[i].getSize();
					String readableLength = FileUtils.byteCountToDisplaySize(length);
					System.out.println(name + ":\t"+remoteFiles[i].isFile()+"\t" + readableLength);
					
				}
			}
			

			ftpClient.logout();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			IOUtils.closeQuietly(outSteam);
			try {
				ftpClient.disconnect();
			} catch (IOException ioe) {
				ioe.printStackTrace();
			}
		}
	}
	
	/**
	 * 上传
	 * */
	public void upload(){
		String srcUrl = "C:/001/菜单权限设计.doc";
		String targetFileName = "菜单权限设计.doc";
		try {
			ftpClient.connect(hostName,port);
			boolean b = ftpClient.login(userName, password);
			// 检测连接是否成功
			int reply = ftpClient.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftpClient.disconnect();
				System.err.println("FTP server refused connection.");
				System.exit(1);
			}
			
			ftpClient.setControlEncoding("GBK");
			FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);  
			conf.setServerLanguageCode("zh"); 
			
			File srcFile = new File(srcUrl);
			FileInputStream fis = null;
			fis = new FileInputStream(srcFile);

			// 设置上传目录
			ftpClient.changeWorkingDirectory(remoteDir);
			ftpClient.setBufferSize(1024);
			ftpClient.setControlEncoding("GBK");

			// 设置文件类型(二进制)
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			// 上传
			b = ftpClient.storeFile(targetFileName, fis);
			IOUtils.closeQuietly(fis);
			
			/*boolean bool = ftpClient.changeWorkingDirectory("/NC");
			System.out.println("changeWorkingDirectory="+bool);
			bool = ftpClient.makeDirectory("/NC");
			System.out.println("makeDirectory="+bool);*/
			
			ftpClient.logout();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

	/**
	 * 测试
	 * */
	public static void main(String[] args) {
		ListFtpFile listFtpfiles = new ListFtpFile();
		listFtpfiles.download();
		listFtpfiles.upload();
	}
}
 

 

 

  • lib.rar (579.6 KB)
  • 下载次数: 115
分享到:
评论

相关推荐

    commons-fileupload和smartupload实现文件上传

    在上述例子中,我们看到了使用Commons FileUpload实现文件上传的步骤: 1. 创建上传页面:HTML表单使用`enctype="multipart/form-data"`属性,指定上传文件的类型。在`&lt;input type="file"&gt;`标签中,用户可以选择要...

    有关FTP上传下载例子

    总结来说,这个FTP上传下载的例子展示了如何利用Apache Commons Net库在Java中实现FTP文件操作,这对于任何需要在应用程序中集成FTP功能的开发者来说都是一个基础且实用的教程。通过理解这些基本步骤和库的使用,你...

    ftp上传下载文件及文件夹

    在Java中,我们可以利用内置的API或者第三方库如Apache Commons Net来实现FTP的文件上传和下载功能。下面我们将详细讲解如何使用这两种方法实现FTP操作。 ### JDK API 实现 FTP 下载文件 JDK 自带的 `java.net` ...

    Android Studio实现FTP分割文件上传

    在这个"Android Studio实现FTP分割文件上传"的例子中,我们将探讨如何在Android Studio中实现这个功能,尤其是针对FTP协议进行文件的分块上传。 首先,理解FTP(File Transfer Protocol)是互联网上用于在主机之间...

    SpringBoot第 11 讲:SpringBoot+ApacheFTPServer文件服务器

    最后,我们需要设置FTP服务器的数据目录,即用户上传和下载文件的位置。这可以通过自定义FtpFileSystemConfigBuilder的实例来实现。 ```java @Bean public FtpFileSystemConfigBuilder fileSystemConfigBuilder() {...

    ftp_upload.zip

    Java作为一种广泛使用的编程语言,提供了丰富的库来实现FTP客户端的功能,使得我们能够在CentOS操作系统中与FTP服务器进行交互,进行文件的上传和下载。 在CentOS下搭建FTP服务器,通常会使用vsftpd(Very Secure ...

    ORACLE中的FTP例子代码

    以下是一个简单的示例,展示了如何在PL/SQL中使用操作系统命令执行FTP上传: ```sql DECLARE l_command VARCHAR2(2000); BEGIN l_command := 'ftp -n -v '; l_command := l_command || 'your_ftp_server '; l_...

    java上传下载例子 有完整代码和jar包

    在Java编程领域,上传和下载功能是Web应用中常见的需求,尤其在文件管理、数据交换等方面。...通过学习和实践这个示例,开发者不仅可以掌握基本的文件上传下载技术,还能进一步了解如何利用第三方库优化和扩展功能。

    ftp客户端源码 java实现

    `org.apache.commons.net.ftp.FTPClient`是Apache Commons Net库提供的一个强大FTP客户端实现。它封装了FTP命令的发送和解析,提供了丰富的API,如`connect()`, `login()`, `binaryMode()`, `upload()`, `download...

    Ftp服务1.0

    在Java中实现FTP服务,我们可以利用Apache Commons Net库,它提供了丰富的FTP客户端和服务器端API,使得开发者可以方便地构建和管理FTP服务器。 首先,我们要了解FTP服务的基本概念。FTP允许用户在两台计算机之间...

    ftp上传

    Java中实现多线程FTP上传,通常会用到`java.net.Socket`类或者Apache Commons Net库中的`FTPClient`类。Apache Commons Net提供了丰富的FTP操作API,包括支持多线程和断点续传。 断点续传是一种允许在文件传输中断...

    利用PSFTP工具实现文件上传详解.zip

    "利用PSFTP工具实现文件上传详解.zip"这个资源提供了一种通过PSFTP工具进行文件上传的方法,同时也包含了一个使用Java编程语言实现文件上传下载的示例。下面我们将深入探讨这两个主题。 首先,PSFTP(PuTTY Secure ...

    java远程进行telnet,ftp,ssh连接的方法及源代码.rar

    `TestFtp.java`很可能是展示如何使用Java进行FTP文件上传、下载和管理的代码实例。 SSH(安全外壳协议)是另一种常用的远程连接协议,它提供了安全的加密通信。在Java中,实现SSH连接一般会用到JSch库,这个库支持...

    Java编写的Ant,实现了上传下载功能

    JavaAnts是一个基于Java编程语言实现的工具,利用Apache Ant技术构建,专注于文件的上传和下载功能。Apache Ant是一个开源的构建工具,它被广泛应用于Java项目中,以替代传统的Makefile,提供更加灵活和跨平台的项目...

    JAVA技术实现上传下载文件到FTP服务器(完整)

    在Java编程中,实现文件的上传和下载至FTP服务器是一项常见的任务,这通常涉及到网络通信和文件处理。Apache Jakarta Commons Net库提供了一种简洁而强大的方式来处理FTP操作。在这个场景中,`FavFTPUtil`类展示了...

    FTPTest.zip

    FTP服务器则是运行FTP服务的软件,它监听特定端口(通常是21),等待客户端连接并处理上传、下载等文件操作请求。 在Android平台上搭建FTP服务器,开发者通常需要使用第三方库,如Apache的Commons Net库,该库提供...

    JAVA文件传输(论文+源代码).zip

    此外,Java还支持FTP库,如Apache Commons Net,它提供了一整套FTP客户端功能,包括连接管理、文件操作、FTP命令执行等。对于更安全的SFTP,我们可以利用JSch库,它实现了SSH2协议,支持SFTP文件传输。 在实际的...

    JAVA上百实例源码以及开源项目源代码

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    java edftp 断点续传

    Java EDFTP 断点续传技术是Java编程中用于FTP(File Transfer Protocol)文件传输的一种高级功能,它允许用户在上传或下载大文件时中断进程,然后在稍后的时间点继续从上次中断的地方开始,而不需要重新传输已传输的...

Global site tag (gtag.js) - Google Analytics