使用JAVA程序操作FTP服务器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gfd54gd5f46/article/details/54578578

使用JAVA程序操作FTP服务器

注:

  • 一切操作都会在Linux下进行
  • 端口可能会被拒绝,教程中默认关闭防火墙,需要开防火墙请添加端口规则

开始之前需要做2件事:

  • 1、模拟一个FTP服务器 。

http://blog.csdn.net/gfd54gd5f46/article/details/53932028#t1

  • 2、引用JAR包进行编译。

    本教程同样要使用Jar包,如果不会使用,请先阅读:

如何使用jar包 :http://blog.csdn.net/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

1


注:我把Jar包跟源文件放在同一目录下

编译:

javac -cp .:commons-net-3.5.jar FtpDemo.java

运行:

java -cp .:commons-net-3.5.jar FtpDemo

2

已经成功获取到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服务器上

3

编译:

javac -cp .:commons-net-3.5.jar FtpDemo.java

运行:

java -cp .:commons-net-3.5.jar FtpDemo


上传成功。

4


然后我们去FTP服务器看看是否有这个文件存在。

  • 可以使用命令行的ftp工具,也可以使用Linux自带的可视化工具
  • 这里直接使用Linux自带的可视化工具连接FTP查看
  • 我使用的Linux系统是带界面的。

5


选择FTP(with login)

填写主机名:你自己的主机名

6


填写用户名和密码

6


Conncet之后就能看到ftp文件夹了

此时我们看到已经上传到FTP服务器了。

7

3、JAVA程序通过ftp传文件到手机(局域网)


前期准备:


1、手机下载FTP服务器


到应用商店下载一个FTP服务器,有很多版本,随便下载一个就可以

8


然后创建一个用户名和密码

9


开启服务就可以了



第一台手机测试上传到 魅族手机上。

10

第二台手机测试上传到 小米手机上

11



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


注:编译的时候报错:

  • 说明没有使用超级管理员权限

12



运行:

java -cp .:commons-net-3.5.jar FtpDemo

13


然后同样我们去手机上确认一下:注意端口号是手机上FTP的端口号,我这里是:
2121

14

15


确实把文件上传到手机上了。

16


使用手机上的Ex文件浏览器查看一下:

17

也确实上传上来了。



当然,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

18

没有更多推荐了,返回首页