使用JAVA程序操作FTP服务器
注:
- 一切操作都会在Linux下进行
- 端口可能会被拒绝,教程中默认关闭防火墙,需要开防火墙请添加端口规则
开始之前需要做2件事:
- 1、模拟一个FTP服务器 。
http://blog.youkuaiyun.com/gfd54gd5f46/article/details/53932028#t1
- 2、引用JAR包进行编译。
本教程同样要使用Jar包,如果不会使用,请先阅读:
如何使用jar包 :http://blog.youkuaiyun.com/gfd54gd5f46/article/details/54578347
1、 JAVA程序查看ftp下的所有文件夹(局域网)
首先创建一个FtpDemo.java的文件
vi FtpDemo.java
- 源码:
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.nio.charset.Charset;
import java.io.*;
public class FtpDemo{
/*
获取FTP服务器上所有的目录
*/
public static void conn(){
//初始化FTP客服端
FTPClient ftp = new FTPClient();
try{
//通过IP跟端口进行连接
//192.168.20.111 是我FTP服务器的IP,你需要换成你自己的
ftp.connect("192.168.20.111",21);
//登录名,密码
ftp.login("lingdu","123");
//设置编码
ftp.setCharset(Charset.forName("UTF-8"));
ftp.setControlEncoding("UTF-8");
//获取目录列表存放在数组中
FTPFile files[] = ftp.listDirectories();
for(int i = 0; i < files.length; i++){
FTPFile file = files[i];
//获取文件名
String fileName = file.getName();
//打印文件名
System.out.println(fileName);
}
}catch(SocketException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try{
Thread.sleep(500);
}catch(InterruptedException e1){
e1.printStackTrace();
}
try{
ftp.abor();
}catch(IOException e){
e.printStackTrace();
}
}
}
public static void main(String args[]){
conn();
}
}
还需要下载一个jar包:
链接:http://pan.baidu.com/s/1cuz7T8 密码:y8v6
注:我把Jar包跟源文件放在同一目录下
编译:
javac -cp .:commons-net-3.5.jar FtpDemo.java
运行:
java -cp .:commons-net-3.5.jar FtpDemo
已经成功获取到FTP服务器下的所有文件夹了。
2、JAVA程序通过ftp传文件到电脑(局域网)
这时需要改造一下代码了:
- 源码
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.nio.charset.Charset;
import java.io.*;
public class FtpDemo{
/*
上传文件到FTP服务器
*/
public static void conn(){
//初始化FTP客服端
FTPClient ftp = new FTPClient();
try{
//通过IP跟端口进行连接
ftp.connect("192.168.20.137",2121);
//登录名,密码
ftp.login("anonymous","123456");
//设置编码
ftp.setCharset(Charset.forName("UTF-8"));
ftp.setControlEncoding("UTF-8");
//将本地文件上传到FTP服务器的方法(fileName,filePath)
ftp.storeFile("/FtpDemo.java.bak",new FileInputStream("/home/lingdu/Desktop/javaCode/test/FtpDemo.java.bak"));
System.out.rpintln("上传成功!");
}catch(SocketException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try{
Thread.sleep(500);
}catch(InterruptedException e1){
e1.printStackTrace();
}
try{
ftp.abor();
}catch(IOException e){
e.printStackTrace();
}
}
}
public static void main(String args[]){
conn();
}
}
作为测试,我们把当前目录下的FtpDemo.java.bak文件上传到FTP服务器上
编译:
javac -cp .:commons-net-3.5.jar FtpDemo.java
运行:
java -cp .:commons-net-3.5.jar FtpDemo
上传成功。
然后我们去FTP服务器看看是否有这个文件存在。
- 可以使用命令行的ftp工具,也可以使用Linux自带的可视化工具
- 这里直接使用Linux自带的可视化工具连接FTP查看
- 我使用的Linux系统是带界面的。
选择FTP(with login)
填写主机名:你自己的主机名
填写用户名和密码
Conncet之后就能看到ftp文件夹了
此时我们看到已经上传到FTP服务器了。
3、JAVA程序通过ftp传文件到手机(局域网)
前期准备:
1、手机下载FTP服务器
到应用商店下载一个FTP服务器,有很多版本,随便下载一个就可以
然后创建一个用户名和密码
开启服务就可以了
第一台手机测试上传到 魅族手机上。
第二台手机测试上传到 小米手机上
2、引用JAR包进行编译。
我们继续改造一下代码:
- 源码:
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.nio.charset.Charset;
import java.io.*;
public class FtpDemo {
/*
通过FTP传文件到手机
*/
public static void test() {
//定义一个二位数组存放ip跟端口
//我这里使用两台手机进行测试(同时传文件到两台手机上)
String ips[][] = {
{ "192.168.20.211", "2121" },
{ "192.168.20.166", "2121" }
};
//初始化FTP客服端
FTPClient ftp = new FTPClient();
//遍历二维数组
for (int i = 0; i < ips.length; i++) {
try {
//通过ip和端口连接FTP服务器,因为端口是整型数据,所以需要强制类型转换一下
ftp.connect(ips[i][0], Integer.parseInt(ips[i][1]));
//手机端设置的FTP服务器的 用户名和密码
//帐号密码我统一设置成一样的,方便测试
ftp.login("root", "123456");
//设置编码
ftp.setCharset(Charset.forName("UTF-8"));
ftp.setControlEncoding("UTF-8");
//传输文件 fileName,filePath
ftp.storeFile("/FtpDemo.java.bak",new FileInputStream
("/home/lingdu/Desktop/javaCode/test/FtpDemo.java.bak"));
//屏幕打印结果
System.out.println("ip:" + ips[i][0] + "-------- yes");
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
//关闭服务
ftp.abor();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String args[]) {
test();
}
}
编译:
javac -cp .:commons-net-3.5.jar FtpDemo.java
注:编译的时候报错:
- 说明没有使用超级管理员权限
运行:
java -cp .:commons-net-3.5.jar FtpDemo
然后同样我们去手机上确认一下:注意端口号是手机上FTP的端口号,我这里是: 2121
确实把文件上传到手机上了。
使用手机上的Ex文件浏览器查看一下:
也确实上传上来了。
当然,FTP的功能不止这些
- 例如:删除,创建,下载,等等。。。。。这里就不一一做说明了
具体可以浏览API文档:FTPClient (Apache Commons Net 3.5 API)
http://commons.apache.org/proper/commonsnet/apidocs/org/apache/commons/net/ftp/FTPClient.html
也可以把FTPClient.java源码导出来在Eclipse下浏览:
源码下载地址:
链接:http://pan.baidu.com/s/1cuz7T8 密码:y8v6