Let's create a class called ScambioFtp, we'll use it to call two function to download/upload files from a specific ftp server.
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.io.CopyStreamAdapter;
public class ScambioFtp {
FTPClient ftp = null;
public ScambioFtp(String host, String user, String pass) throws Exception
{
//host can either be ad url or an ip address
ftp = new FTPClient(); //The object we'll use to connect to our ftp server
ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); //We ensure to get the messages from the server and we redirect it to our console output stream
ftp.connect(host);
int reply = ftp.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
throw new Exception("Problem during the connection to the host: " + host);
}
if(!ftp.login(user, pass))
{
ftp.disconnect();
throw new Exception("Login problem, wrong user or password");
}
}
/**
* Upload a file in the current ftp filesystem directory
* @param filePath
* @throws IOException
*/
public void uploadFile(String filePath) throws IOException
{
try
{
File vab = new File(filePath);
String fileName = vab.getName();
FileInputStream input = new FileInputStream(vab);
ftp.storeFile(fileName, input); //start upload
}catch (Exception e) {
e.printStackTrace();
System.out.println("Problem during upload of the file " + filePath);
}
}
/**
* Download of the fileName in the current directory of the ftp filesystem
* @param fileName = name of the file to download from the server
* @param path = local path where to save the downloaded file
* @throws IOException
* @throws FileNotFoundException
*/
public void downloadFile(String fileName, String path) throws FileNotFoundException, IOException
{
String remoteFilePath = fileName;
String localFilePath = path +"/"+ fileName;
try(FileOutputStream fos = new FileOutputStream(localFilePath))
{
ftp.retrieveFile(remoteFilePath, fos);
}catch (IOException e) {
e.printStackTrace();
}
}
/**
* disconnect from the ftp
*/
public void disconnect()
{
if(this.ftp.isConnected())
{
try
{
this.ftp.logout();
this.ftp.disconnect();
}catch (Exception e) {
System.out.println("problem while disconnecting from ftp server");
}
}
}
public void openFolder(String folderName) throws IOException
{
if(!ftp.changeWorkingDirectory(folderName))
System.out.println("Directory " + folderName + " not found");
}
//Use main to test this shit
public static void main(String[] args) throws Exception
{
ScambioFtp ftp = new ScambioFtp("ftp.mine.org", Config._USERNAME, Config._FTP_PASSWORD);
String ordfilePath = "res/ordini/0001.dat";
ftp.uploadFile(ordfilePath);
ftp.disconnect();
}
}
That's pretty much it, you can easly copy-paste it and start using it right away. if you want to use passive mode or some other configuration you can access a lot of methods from FTPClient.
Nessun commento:
Posta un commento