Revert
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/net/branches/NET_2_0@925541 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/examples/ftp/FTPExample.java b/src/main/java/examples/ftp/FTPExample.java
index d36ae8e..29e8b31 100644
--- a/src/main/java/examples/ftp/FTPExample.java
+++ b/src/main/java/examples/ftp/FTPExample.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+
package examples.ftp;
import java.io.FileInputStream;
@@ -22,14 +22,12 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.PrintStream;
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.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
/***
@@ -42,22 +40,152 @@
* Usage: ftp [-s] [-b] <hostname> <username> <password> <remote file> <local file>
* <p>
***/
-public final class FTPExample {
+public final class FTPExample
+{
- public static final void main(String[] args) throws IOException
+ public static final String USAGE =
+ "Usage: ftp [-s] [-b] <hostname> <username> <password> <remote file> <local file>\n" +
+ "\nDefault behavior is to download a file and use ASCII transfer mode.\n" +
+ "\t-s store file on server (upload)\n" +
+ "\t-b use binary transfer mode\n";
+
+ public static final void main(String[] args)
{
- FTPClient client = new FTPClient();
- client.setControlEncoding("utf-8");
- client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
- client.connect("localhost");
- client.login("rory", "yi6bovak");
-
- PrintStream out = new PrintStream(System.out, true, "utf-8");
+ int base = 0;
+ boolean storeFile = false, binaryTransfer = false, error = false;
+ String server, username, password, remote, local;
+ FTPClient ftp;
- for (FTPFile file : client.listFiles())
- out.println(file.getName());
-
- out.println("你好吗");
+ for (base = 0; base < args.length; base++)
+ {
+ if (args[base].startsWith("-s"))
+ storeFile = true;
+ else if (args[base].startsWith("-b"))
+ binaryTransfer = true;
+ else
+ break;
+ }
+
+ if ((args.length - base) != 5)
+ {
+ System.err.println(USAGE);
+ System.exit(1);
+ }
+
+ server = args[base++];
+ username = args[base++];
+ password = args[base++];
+ remote = args[base++];
+ local = args[base];
+
+ ftp = new FTPClient();
+ ftp.addProtocolCommandListener(new PrintCommandListener(
+ new PrintWriter(System.out)));
+
+ try
+ {
+ int reply;
+ ftp.connect(server);
+ System.out.println("Connected to " + server + ".");
+
+ // After connection attempt, you should check the reply code to verify
+ // success.
+ reply = ftp.getReplyCode();
+
+ if (!FTPReply.isPositiveCompletion(reply))
+ {
+ ftp.disconnect();
+ System.err.println("FTP server refused connection.");
+ System.exit(1);
+ }
+ }
+ catch (IOException e)
+ {
+ if (ftp.isConnected())
+ {
+ try
+ {
+ ftp.disconnect();
+ }
+ catch (IOException f)
+ {
+ // do nothing
+ }
+ }
+ System.err.println("Could not connect to server.");
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+__main:
+ try
+ {
+ if (!ftp.login(username, password))
+ {
+ ftp.logout();
+ error = true;
+ break __main;
+ }
+
+ System.out.println("Remote system is " + ftp.getSystemName());
+
+ if (binaryTransfer)
+ ftp.setFileType(FTP.BINARY_FILE_TYPE);
+
+ // Use passive mode as default because most of us are
+ // behind firewalls these days.
+ ftp.enterLocalPassiveMode();
+
+ if (storeFile)
+ {
+ InputStream input;
+
+ input = new FileInputStream(local);
+
+ ftp.storeFile(remote, input);
+
+ input.close();
+ }
+ else
+ {
+ OutputStream output;
+
+ output = new FileOutputStream(local);
+
+ ftp.retrieveFile(remote, output);
+
+ output.close();
+ }
+
+ ftp.logout();
+ }
+ catch (FTPConnectionClosedException e)
+ {
+ error = true;
+ System.err.println("Server closed connection.");
+ e.printStackTrace();
+ }
+ catch (IOException e)
+ {
+ error = true;
+ e.printStackTrace();
+ }
+ finally
+ {
+ if (ftp.isConnected())
+ {
+ try
+ {
+ ftp.disconnect();
+ }
+ catch (IOException f)
+ {
+ // do nothing
+ }
+ }
+ }
+
+ System.exit(error ? 1 : 0);
} // end main
}