Java tutorial
/* * @(#)FtpServer.java - for ftp access * * Copyright (c) 2004-2006 by roehrist, All Rights Reserved. * * This file is part of ProjectX, a free Java based demux utility. * By the authors, ProjectX is intended for educational purposes only, * as a non-commercial test project. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* * requires Jakarta Commons Net library, developed by the * Apache Software Foundation (http://www.apache.org/). */ package net.sourceforge.dvb.projectx.xinput.ftp; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import net.sourceforge.dvb.projectx.common.Resource; import net.sourceforge.dvb.projectx.xinput.XInputFile; import net.sourceforge.dvb.projectx.xinput.XInputDirectory; import net.sourceforge.dvb.projectx.xinput.ftp.FtpVO; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; public class FtpServer { private FtpVO ftpVO; private StringCommandListener scl; private FTPClient ftpClient; private boolean isOpen; private String testMsg; private FtpServer() { throw new UnsupportedOperationException(); } public FtpServer(FtpVO aFtpVO) { if (aFtpVO == null) { throw new IllegalArgumentException("aFtpVO mustn't be null!"); } ftpVO = aFtpVO; scl = new StringCommandListener(); ftpClient = new FTPClient(); ftpClient.addProtocolCommandListener(scl); isOpen = false; } public boolean open() { boolean isSuccessful = false; if (isOpen) { throw new IllegalStateException("Is already open, must be closed before!"); } try { int reply; ftpClient.connect(ftpVO.getServer(), ftpVO.getPortasInteger()); reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); throw new IOException("Can't connect!"); } if (!ftpClient.login(ftpVO.getUser(), ftpVO.getPassword())) { ftpClient.logout(); throw new IOException("Can't login!"); } if (!ftpClient.changeWorkingDirectory(ftpVO.getDirectory())) { ftpClient.logout(); throw new IOException("Can't change directory!"); } ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); isSuccessful = true; } catch (Exception e) { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException f) { // do nothing } } isSuccessful = false; } isOpen = isSuccessful; return isSuccessful; } /** * */ public XInputFile[] listFiles() { ArrayList list = new ArrayList(); FTPFile[] ftpFiles = null; try { ftpFiles = ftpClient.listFiles(); for (int i = 0, j = ftpFiles.length; i < j; i++) { if (!ftpFiles[i].isFile()) continue; FtpVO tempFtpVO = (FtpVO) ftpVO.clone(); tempFtpVO.setFtpFile(ftpFiles[i]); list.add(new XInputFile(tempFtpVO)); } } catch (Exception e) { System.err.println("!> error create ftp filelist: " + e); } XInputFile[] ftpInputFiles = new XInputFile[list.size()]; for (int i = 0, j = ftpInputFiles.length; i < j; i++) ftpInputFiles[i] = (XInputFile) list.get(i); return ftpInputFiles; } /** * */ public FtpVO[] listDirectories() { ArrayList list = new ArrayList(); FTPFile[] ftpFiles = null; try { ftpFiles = ftpClient.listFiles(); for (int i = 0, j = ftpFiles.length; i < j; i++) { if (!ftpFiles[i].isDirectory()) continue; else if (ftpFiles[i].getName().startsWith(".")) continue; FtpVO tempFtpVO = (FtpVO) ftpVO.clone(); tempFtpVO.setDirectory(tempFtpVO.getDirectory() + "/" + ftpFiles[i].getName()); tempFtpVO.setFtpFile(ftpFiles[i]); list.add(tempFtpVO); } } catch (Exception e) { System.err.println("!> error create ftp directory list: " + e); } FtpVO[] ftpInputDirectories = new FtpVO[list.size()]; for (int i = 0, j = ftpInputDirectories.length; i < j; i++) ftpInputDirectories[i] = (FtpVO) list.get(i); return ftpInputDirectories; } public InputStream retrieveFileStream(String aFileName) throws IOException { return ftpClient.retrieveFileStream(aFileName); } public void close() { if (!isOpen) { throw new IllegalStateException("Is already closed, must be opened before!"); } else { try { ftpClient.logout(); ftpClient.disconnect(); } catch (Exception e) { // do nothing } isOpen = false; } } public boolean test() { int base = 0; boolean error = false; FTPFile[] ftpFiles; testMsg = null; try { int reply; ftpClient.connect(ftpVO.getServer(), ftpVO.getPortasInteger()); // Check connection reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); testMsg = Resource.getString("ftpchooser.msg.noconnect"); return false; } // Login if (!ftpClient.login(ftpVO.getUser(), ftpVO.getPassword())) { ftpClient.logout(); testMsg = Resource.getString("ftpchooser.msg.nologin"); return false; } ftpClient.syst(); // Change directory if (!ftpClient.changeWorkingDirectory(ftpVO.getDirectory())) { testMsg = Resource.getString("ftpchooser.msg.nodirectory"); return false; } testMsg = Resource.getString("ftpchooser.msg.success"); ftpClient.logout(); } catch (IOException ex) { testMsg = ex.getLocalizedMessage(); error = true; } finally { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException f) { } } } return !error; } public String getTestMsg() { return testMsg; } public String getLog() { return scl.getMessages(); } } /* * int base = 0; boolean storeFile = false, binaryTransfer = false, error = * false; String server, username, password, remote, local, remoteDir; FTPClient * ftp; FTPFile[] ftpFiles; * * server = "192.168.0.5"; username = "root"; password = "dreambox"; remote = * ""; local = ""; remoteDir = "/hdd/movie"; * * ftp = new FTPClient(); ftp.addProtocolCommandListener( new * PrintCommandListener(new PrintWriter(System.out))); * * * try { if (!ftp.login(username, password)) { ftp.logout(); error = true; } * else { System.out.println("Remote system is " + ftp.getSystemName()); * * ftp.setFileType(FTP.BINARY_FILE_TYPE); ftp.enterLocalPassiveMode(); * * ftp.changeWorkingDirectory(remoteDir); ftpFiles = ftp.listFiles(); for (int i = * 0; i < ftpFiles.length; i++) { FTPFile file = ftpFiles[i]; * System.out.println("Listing of " + remoteDir + ": " + file.getName()); } * * * if (storeFile) { InputStream input; * * input = new FileInputStream(local); ftp.storeFile(remote, input); } else { * OutputStream output; * * output = new FileOutputStream(local); ftp.retrieveFile(remote, output); } * * * 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 } } } */