实现远程FTP文件与本地(WIN系统)文件同步

学习JAVA也有两个月了,一直想写一个同步程序.

程序已经可以实现对FTP上数据的简单同步,只是针对文件名,但是完全是按照原始的思想去写的,还需要进一步的改动.

源代码如下:

import java.io.*;
import java.net.*;
import sun.net.*;
import sun.net.ftp.*;
//此例实现远程FTP服务器与本地(WIN系统)文件同步


class ftp_tem4{
 public static void main(String[] args){
  //远程FTP的IP及用户属性等的定义
  String server="10.10.1.1";
  String user="aaa";
  String port="21";
  String password="aaa123";
  String userdir="/";
  //本地保存FTP目录列表的文件
  String localtempfile="f://dbf//qx//temp.txt";
  //这里路径后一定得加//,否则文件会下到上一级目录下.  
  String localDir="f://dbf//qx//";
  String downfile="2";//定义为不为结束标识的常量.
  //String remotefile="*";
  //String string="25";
  int j=0;
  //捕获异常
  try{
   //建立远程文件的输入流
   FtpClient ftpClient=new FtpClient();
   ftpClient.openServer(server,8021);
   ftpClient.login(user,password);
   if(userdir.length()!=0){
    ftpClient.cd(userdir);
   }
   ftpClient.binary();
   TelnetInputStream is=ftpClient.nameList(userdir);
   int c;
   //while((c=is.read())!=-1)
   // System.out.print((char)c);
   //System.out.println("aaa="+aaa);
   
   //建立输出流,将文件名全部写到temp.txt文件中
   File file_out=new File(localtempfile);
   FileOutputStream os=new FileOutputStream(file_out);
   byte[] bytes=new byte[1024];
   int s;
   while((s=is.read(bytes))!=-1){
    os.write(bytes,0,s);
   }
   //手工建立一个结束标识
   os.write(0);
   //关闭打开的文件流,包括本地和远程.
   os.close();
   is.close();
   ftpClient.closeServer(); 


   //读出temp.txt文件内容,并存字符串数组
   FileInputStream file_1=new FileInputStream(file_out);
   DataInputStream data_1=new DataInputStream(file_1);
      
   //System.out.println(downfile);
   //终于下回了指定目录下的所有文件:)   
   FtpClient ftpClient1=new FtpClient();
   ftpClient1.openServer(server,8021);
   ftpClient1.login(user,password);
   if(userdir.length()!=0){
    ftpClient1.cd(userdir);
   }
   ftpClient1.binary();
   //data_1.skip(6);
   //int i=1;
   
   while(downfile!="0"){
    //依次读取远程服务器上文件
    downfile=data_1.readLine();
    //远程文件与本地文件做比较,不同,则下载  
    File lDir=new File(localDir);
    String[] lDirList=lDir.list();
    String[] aaa=lDirList[0].split(" ");
    for(int y=0;y<aaa.length;y++)
     System.out.println(aaa[y]);
    
    //int length=lDirList.length;
    //System.out.println("文件个数="+lDirList.length);
    /*实验的两句
    for(int x=0;x<lDirList.length;x++)
     System.out.println(lDirList[x]);
    System.out.println("downfile="+downfile);*/
    j=0;
    for(int i=0;i<lDirList.length;i++){
     //System.out.println("i="+i+"lDirList"+"["+i+"]="+lDirList[i]);
     if(downfile.equals(lDirList[i])) j=1;
     if(j==1) break;
     //System.out.println("j="+j);
    }
    if(j==0){
     //获取FTP相应文件的TelnetInputStream,再将其写到本地指定目录下.
     //System.out.println(i);
     //没有想到字符串可以这样来连接:)
     //downfile1为下载到本地文件的绝对路径名
     String downfile1=localDir+downfile;
     
     //System.out.println("downfile1="+downfile1);
     TelnetInputStream tempis=ftpClient1.get(downfile);
     File file_out1=new File(downfile1);
     FileOutputStream os1=new FileOutputStream(file_out1);
     byte[] bytes1=new byte[1024];
     int y;
     while((y=tempis.read(bytes1))!=-1){
       os1.write(bytes1,0,y);
     }
     os1.close(); 
    }
    //else System.out.println(downfile+"文件存在");
    //i=i+1;  
   }
   data_1.close();
   file_1.close();
   ftpClient1.closeServer(); 

  }
  catch(Exception e){
   System.err.print("err");
  }
 }
}

众多输出的句子都是为了调试程序用的:)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值