All pastes #631385 Raw Edit

Miscellany

public text v1 · immutable
#631385 ·published 2007-07-23 22:27 UTC
rendered paste body
import java.io.FileInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPConnectionClosedException;
import org.apache.commons.net.ftp.FTPReply;


public class Fdb {
   public class FTPServer {
      boolean online = true;
      FTPClient client = null;
      String hostname = null;
      OutputStream os = null;
   }

   public static final String USAGE =
      "Usage: Fdb <local file>\n" +
      "\nUploads local file to remote ftp servers in binary transfer mode.\n";

   public static void main(String[] args) {
                                                 String[]    ftphost = { "filedb1.test", "filedb2.test"
      FTPServer[] ftpsvr = new FTPServer[ftphost.length];
      File fl = null;
      FileInputStream is = null;

      if (args.length == 0) {
         System.out.println(USAGE);
         System.exit(-1);
      }

      try {
         fl = new File(args[0]);
         is = new FileInputStream(fl);
      } catch (Exception e) {
         System.exit(-1);
      }

      // data type initialization
      for (int i = 0; i < ftpsvr.length; ++i) {
         ftpsvr[i] = new Fdb.FTPServer();
         ftpsvr[i].client = new FTPClient();
         ftpsvr[i].client.setConnectTimeout(1000); // one sec timeout
         ftpsvr[i].client.setSoTimeout(1000);
         ftpsvr[i].client.addProtocolCommandListener(new PrintCommandListener(
                  new PrintWriter(System.out)));
         ftpsvr[i].hostname = ftphost[i];
      }

      // ftp connections
      for (int i = 0; i < ftpsvr.length; i++) {
         try {
            ftpsvr[i].client.connect(ftpsvr[i].hostname);

            if (FTPReply.isPositiveCompletion(ftpsvr[i].client.getReplyCode())) {
               System.out.println(ftpsvr[i].hostname + " ftp connection");
               ftpsvr[i].online = true;
               System.out.println(ftpsvr[i].hostname + " marked server online");
            } else {
               System.out.println(ftpsvr[i].hostname + " no ftp connection");
               System.out.println(ftpsvr[i].hostname + " marked server offline");
            }
         } catch (Exception e) {
            ftpsvr[i].online = false;
         }
      }

      // connection negotiation
      for (int i = 0; i < ftpsvr.length; i++) {
         if (ftpsvr[i].online) {
            ftpsvr[i].client.enterLocalPassiveMode();
            try {
               ftpsvr[i].client.setFileType(FTPClient.BINARY_FILE_TYPE);
               ftpsvr[i].client.changeWorkingDirectory("/pub/incoming");
               ftpsvr[i].os = ftpsvr[i].client.storeFileStream(args[0]);
            } catch (java.io.IOException e) {
               ftpsvr[i].online = false;
            }
         }
      }

      // Writing input byte streams to ftp server destinations
      byte buf[] = new byte[8192];

      int bytesRead = 0;

      try {
         bytesRead = is.read(buf);
      } catch(Exception e) {}

      while (bytesRead != -1) {
         // write data out to ftp servers
         for (int i = 0; i < ftpsvr.length; i++) {
            try {
               if (ftpsvr[i].online) {
                  if (FTPReply.isPositivePreliminary(ftpsvr[i].client.getReplyCode())
                        && ftpsvr[i].os != null) {
                     ftpsvr[i].os.write(buf, 0, bytesRead);
                  }
               }
            } catch (Exception e1) {
               // here we're assuming any exception was generated by
               // an I/O fault related to writing to the ftp server,
               // thus the server is offline
               ftpsvr[i].online = false;
            }
         }

         try {
            bytesRead = is.read(buf);
         } catch (Exception e) {}
      }

      try {
         is.close();
      } catch (Exception e) {}

     for (int i = 0; i < ftpsvr.length; i++) {
        if (ftpsvr[i].online) {
           System.out.println("closing output stream " + ftpsvr[i].hostname);
           try {
              ftpsvr[i].os.close();
              ftpsvr[i].client.completePendingCommand();
              ftpsvr[i].client.logout();
              ftpsvr[i].client.disconnect();
           } catch (Exception e) {}
        }
     }
   }
}