rendered paste bodyimport 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) {}
}
}
}
}