Heute möchte ich zeigen, wie Ihr euer Java Programm um eine FTP Klasse erweitern könnt, bspw. um eine Update-Funktion zu implementieren oder einen Datenaustausch bei einem Chat oder ähnlichem zu realisieren.
Wie man unter Linux einen FTP Server installiert, habe ich bereits in diesem Beitrag gezeigt – diesen Server könnte man selbstverständlich verwenden.
Zunächst benötigt man eine geeignete IDE (Integrierte Entwicklungsumgebung). Ich verwende Eclipse und werde mich in diesem Tutorial ausschließlich auf Eclipse beziehen, aber ihr könnt natürlich jede andere geeignete IDE verwenden bspw. CodeBlocks oder NetBeans.
Für die FTP Klasse greife ich auf die Commons Net Library von Apache zurück.

Download von Apache Commons Net

Lade dir die neuste Version der Apache Commons Net runter: //commons.apache.org/proper/commons-net/download_net.cgi
(In meinem Fall Version 3.6)
Anschließend entpacke die *.zip bzw. tar.gz -Datei.

Import von Apache Commens Net (Eclipse)

Wähle ein vorhandenes oder erstelle ein neues Java-Projekt. Anschließend öffne die Projekteinstellungen unter Project –> Properties.
Java_tut_Linux-ManiacNavigiere zu Java Build Path –> Libraries –> Add External JARs… und wähle die commons-net-3.6.jar Datei aus.

 

 

 

FTP Klasse erstellen

Da ich für dieses Tutorial ein Neues Projekt angelegt habe, erstelle ich nun die Haupt -und die FTP Klasse.
Bei einem bereits vorhandenen Projekt, wird natürlich nur die FTP Klasse benötigt.
Klasse_erstellen

Am Ende dieses kleinen Tutorials wird die FTP Klasse folgendes Methoden beinhalten:

  • public static String[] ShowList – Listet alle Datei -sowie Ordnernamen auf
  • public static boolean singleFileDownload – Lädt eine Datei vom FTP Server herunter
  • public static boolean singleFileUpload – Lädt eine Datei auf den FTP Server hoch (FTP Benutzer benötigt Schreibzugriff in dem Verzeichnis)

Im nächsten Tutorial erweitern wir die FTP Klasse um folgende Methoden:

  • public static boolean verzeichnisDownload – Lädt ein komplettes Verzeichnis mit allen Unterordnern, sowie Dateien vom FTP Server herunter
  • public static boolean verzeichnisUpload – Lädt ein komplettes Verzeichnis mit allen Unterordnern, sowie Dateien auf den FTP Server hoch (FTP Benutzer benötigt Schreibzugriff in dem Verzeichnis)
  • private static boolean sizeCheck Prüft vor und nach einem Up -sowie Download die Dateigrösse – Prüfung korrekt hoch bzw. runtergeladen

FTP Klasse


01 import java.io.*;
02 import org.apache.commons.net.ftp.FTPClient;
03
04 public class FTP
05 {
06    public static String[] showListString host, int port, String usr, 
07        String pwd, boolean showMessages throws IOException
08    {
09       FTPClient ftpClient = new FTPClient();
10       ftpClient.enterLocalPassiveMode();
11       String[]  filenameList;
12       try {
13          ftpClient.connecthost, port );
14          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
15          ftpClient.loginusr, pwd );
16          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
17          filenameList = ftpClient.listNames();
18          ftpClient.logout();
19          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
20       finally {
21          ftpClient.disconnect();
22       }
23       return filenameList;
24    }
25    
26    public static boolean singleFileUploadString lokaleQuellDatei, String remoteZielDatei,
27          String host, int port, String usr, String pwd, boolean showMessages throws IOException
28    {
29       FTPClient       ftpClient = new FTPClient();
30       ftpClient.enterLocalPassiveMode();
31       FileInputStream fis = null;
32       boolean         resultOk = true;
33       try {
34          ftpClient.connecthost, port );
35          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
36          resultOk &= ftpClient.loginusr, pwd );
37          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
38          fis = new FileInputStreamlokaleQuellDatei );
39          resultOk &= ftpClient.storeFileremoteZielDatei, fis );
40          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
41          resultOk &= ftpClient.logout();
42          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
43       finally {
44          try iffis != null ) { fis.close()} } catchIOException e ) {/* nothing to do */}
45          ftpClient.disconnect();
46       }
47       return resultOk;
48    }
49    
50    public static boolean singleFileDownload(String remoteDatei, String lokalerSpeicherpfad,
51        String host, int port, String usr, String pwd, boolean showMessagesthrows IOException 
52    {
53       FTPClient       ftpClient = new FTPClient();
54       ftpClient.enterLocalPassiveMode();
55       FileOutputStream fos = null;
56       boolean          resultOk = true;  
57       try {
58          ftpClient.connecthost, port );
59          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
60          resultOk &= ftpClient.loginusr, pwd );
61          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
62          File downloadFile = new File(lokalerSpeicherpfad);       
63          fos = new FileOutputStream(downloadFile);
64          resultOk &= ftpClient.retrieveFileremoteDatei, fos );
65          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
66          resultOk &= ftpClient.logout();
67          ifshowMessages ) { System.out.printlnftpClient.getReplyString() )}
68       finally {
69            try iffos != null ) { fos.close()} } catchIOException e ) {/* nothing to do */}
70            ftpClient.disconnect();
71         }
72       return resultOk;
73   }
74 }

Java2html

Main Klasse


01 import java.io.IOException;
02
03 public class Main {
04
05   public static void main(String[] argsthrows IOException 
06   {
07     String FileList[] = FTP.showList("ftp.linux-maniac.de"21"user""passwort"false);
08     for (String s : FileList)
09       System.out.println(s);
10     
11     FTP.singleFileUpload("I:/Test_Upload.txt""/public_html/TestOrdner/Test_Upload.txt"
12         "ftp.linux-maniac.de"21"user""passwort"true);
13     
14     FTP.singleFileDownload("/public_html/wp-admin/Test_Upload.txt""I:/Test_Download.txt"
15         "ftp.linux-maniac.de"21"user""passwort"true);
16   }
17 }

Java2html

 

Alle Übergabeparameter müssen natürlich entsprechend angepasst werden.

In diesem Beispiel werden alle drei Methoden ausgeführt. Zunächst wird das FTP Verzeichnis ausgegeben (Ordner sowie Dateinamen).
Anschließend eine Text-Datei von I:\Test_upload.txt nach /public_html/TestOrdner/Test_Upload.txt hochgeladen.
Nachdem die Datei hochgeladen wurde, wird diese nach I:\Test_Download.txt heruntergeladen.

 

Wie geht’s weiter?
Im zweiten Teil erweitere ich die Klasse um mindestens drei Methoden:
– Upload eines kompletten Verzeichnisses
– Download eines kompletten Verzeichnisses
– Prüfung der hoch bzw. runtergeladenen Datei(en)


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.