001 /*
002 * Copyright 2001-2005 The Apache Software Foundation
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package examples;
017
018 import java.io.FileInputStream;
019 import java.io.FileOutputStream;
020 import java.io.IOException;
021 import java.io.InputStream;
022 import java.io.OutputStream;
023 import java.io.PrintWriter;
024 import org.apache.commons.net.ftp.FTP;
025 import org.apache.commons.net.ftp.FTPClient;
026 import org.apache.commons.net.ftp.FTPConnectionClosedException;
027 import org.apache.commons.net.ftp.FTPReply;
028
029 /***
030 * This is an example program demonstrating how to use the FTPClient class.
031 * This program connects to an FTP server and retrieves the specified
032 * file. If the -s flag is used, it stores the local file at the FTP server.
033 * Just so you can see what's happening, all reply strings are printed.
034 * If the -b flag is used, a binary transfer is assumed (default is ASCII).
035 * <p>
036 * Usage: ftp [-s] [-b] <hostname> <username> <password> <remote file> <local file>
037 * <p>
038 ***/
039 public final class ftp
040 {
041
042 public static final String USAGE =
043 "Usage: ftp [-s] [-b] <hostname> <username> <password> <remote file> <local file>\n" +
044 "\nDefault behavior is to download a file and use ASCII transfer mode.\n" +
045 "\t-s store file on server (upload)\n" +
046 "\t-b use binary transfer mode\n";
047
048 public static final void main(String[] args)
049 {
050 int base = 0;
051 boolean storeFile = false, binaryTransfer = false, error = false;
052 String server, username, password, remote, local;
053 FTPClient ftp;
054
055 for (base = 0; base < args.length; base++)
056 {
057 if (args[base].startsWith("-s"))
058 storeFile = true;
059 else if (args[base].startsWith("-b"))
060 binaryTransfer = true;
061 else
062 break;
063 }
064
065 if ((args.length - base) != 5)
066 {
067 System.err.println(USAGE);
068 System.exit(1);
069 }
070
071 server = args[base++];
072 username = args[base++];
073 password = args[base++];
074 remote = args[base++];
075 local = args[base];
076
077 ftp = new FTPClient();
078 ftp.addProtocolCommandListener(new PrintCommandListener(
079 new PrintWriter(System.out)));
080
081 try
082 {
083 int reply;
084 ftp.connect(server);
085 System.out.println("Connected to " + server + ".");
086
087 // After connection attempt, you should check the reply code to verify
088 // success.
089 reply = ftp.getReplyCode();
090
091 if (!FTPReply.isPositiveCompletion(reply))
092 {
093 ftp.disconnect();
094 System.err.println("FTP server refused connection.");
095 System.exit(1);
096 }
097 }
098 catch (IOException e)
099 {
100 if (ftp.isConnected())
101 {
102 try
103 {
104 ftp.disconnect();
105 }
106 catch (IOException f)
107 {
108 // do nothing
109 }
110 }
111 System.err.println("Could not connect to server.");
112 e.printStackTrace();
113 System.exit(1);
114 }
115
116 __main:
117 try
118 {
119 if (!ftp.login(username, password))
120 {
121 ftp.logout();
122 error = true;
123 break __main;
124 }
125
126 System.out.println("Remote system is " + ftp.getSystemName());
127
128 if (binaryTransfer)
129 ftp.setFileType(FTP.BINARY_FILE_TYPE);
130
131 // Use passive mode as default because most of us are
132 // behind firewalls these days.
133 ftp.enterLocalPassiveMode();
134
135 if (storeFile)
136 {
137 InputStream input;
138
139 input = new FileInputStream(local);
140
141 ftp.storeFile(remote, input);
142
143 input.close();
144 }
145 else
146 {
147 OutputStream output;
148
149 output = new FileOutputStream(local);
150
151 ftp.retrieveFile(remote, output);
152
153 output.close();
154 }
155
156 ftp.logout();
157 }
158 catch (FTPConnectionClosedException e)
159 {
160 error = true;
161 System.err.println("Server closed connection.");
162 e.printStackTrace();
163 }
164 catch (IOException e)
165 {
166 error = true;
167 e.printStackTrace();
168 }
169 finally
170 {
171 if (ftp.isConnected())
172 {
173 try
174 {
175 ftp.disconnect();
176 }
177 catch (IOException f)
178 {
179 // do nothing
180 }
181 }
182 }
183
184 System.exit(error ? 1 : 0);
185 } // end main
186
187 }
188