Ftp-Client Tutorial: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
(Java Ftp Client Tutorial)
K (Listen Initialisieren)
 
(28 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= Java Ftp  Client Tutorial =
 
= Java Ftp  Client Tutorial =
 +
Mache mich mal dran ein Ftp Tutorial zu schreiben. In unserem Tutorial erstellen wir einen FTP Server. Wir verwenden für Das Tutorial die mitgelieferte Klasse aus der neusten Java Version. Für dieses Tutorial solltest du die Grundlagen von Java kennen. Auch empfehle ich eine IDE zu benutzen, die über einen Designer verfügt.
  
Mache mich mal drann um ein Ftp Tutorial zu Schreiben. In Unserem Toturial Erstellen wir einen Multi-Down/Upload Server. Wir Verwenden für Das Toturial die Mitgelieferte Klasse aus der Neusten Java Version. Für dieses Toturial solltest du die Grundlagen von Java Kennen. Auch Enfehle ich eine IDE zu Benutzen die über einen Designer Verfügt.
+
== Importe ==
  
 
+
<syntaxhighlight lang="java">
== Importierungen ==
 
 
 
<code=java>
 
 
import java.awt.List;
 
import java.awt.List;
 
import java.awt.event.ActionEvent;
 
import java.awt.event.ActionEvent;
Zeile 36: Zeile 34:
 
import sun.net.ftp.FtpDirEntry;
 
import sun.net.ftp.FtpDirEntry;
 
import sun.net.ftp.FtpProtocolException;
 
import sun.net.ftp.FtpProtocolException;
</code=java>
+
</syntaxhighlight>
  
  
  
 
== Das Frame ==
 
== Das Frame ==
Ich habe bei mir das Frame mit einer IDE Geschrieben die einen Desingner Verwendet, aber erfahrene Java Programmierer Sollten dies
+
Ich habe bei mir das Frame mit einer [[IDE]] geschrieben, die einen Designer verwendet, aber erfahrene Java Programmierer sollten dies auch in wenigen Minuten mit einer IDE, die ohne Designer arbeitet hinbekommen.
auch in Wenigen Minuten mit einer IDE die Ohne Designer Arbeitet hinbekommen.
 
In dem Bild seht Ihr wie ich das Frame Aufgebaut habe.
 
 
 
 
 
[[Datei:Feather 150 http://www.freesoft.24.eu/bilder/bild22.PNG|gerahmt|Eine Feder mit Rahmen]]
 
 
 
 
 
  
Wie man Seht befinden sich auf dem Form 3 Listen und ein Menüstrip mit 2 Menüs, 3 textfelder, 1 Passwort Feld und ein Button. Ich habe folgende Listen Modelle den listen zugeordnet
+
In dem folgenden Bild zeige ich, wie ich das Frame aufgebaut habe.
  
 +
[[Datei:Bild22.PNG|mini|hochkant=1.8|Das Frame]]
  
 +
Wie man sieht, befinden sich auf dem {{JAPI|JFrame}} drei Listen und eine {{JAPI|MenuBar}} mit zwei Menüs, drei {{JAPI|JTextField}}s, einem {{JAPI|JPasswortField}} und einem [[JButton]]. Ich habe folgende {{JAPI|ListModel}}s den jeweiligen Listen zugeordnet:
  
* Liste1 (DefaultListModel) mod (diese list zeigt die verzeichnisse an und Verfügt über ein Click ActionEvent
 
* Liste2 (DefaultListModel) Fmod (diese liste zeigt die Dateien An, aus dem Aktuellen FTP Verzeichniss.
 
* Liste3 (DefaultListModel) Cmod (diese liste dient als Interne Console)
 
  
 +
* Liste1 ({{JAPI|DefaultListModel}}) mod (zeigt die Verzeichnisse an und verfügt über ein {{JAPI|ActionEvent}})
 +
* Liste2 (DefaultListModel) Fmod (zeigt die Dateien aus dem aktuellen Verzeichnis an.)
 +
* Liste3 (DefaultListModel) Cmod (dient als interne Console)
  
Die Textfelder Werden folgt Verwendet
 
  
* TextFeld1 Hier wird der Server Angegeben
+
'''Die Textfelder werden wie folgt verwendet'''
* Textfeld2 Hier wird der Port Angegeben (Achtung der Port Muss Angegeben werden, bei vielen Servern ist der Standardt Port 21)
 
* Textfeld3 Hier Kommt der Benutzername Rein
 
* PasswordFeld1 Das Passwort.
 
  
 +
* TextFeld1 - hier wird der Server angegeben
 +
* Textfeld2 - hier wird der Port angegeben (Bei FTP-Servern ist dies standardmäßig Port 21)
 +
* Textfeld3 - hier wird der Benutzername eingegeben
 +
* PasswordFeld1 - ein Eingabefeld für das Passwort.
  
Das Menü ist Aufgebaut in
 
  
 +
'''Das Menü ist wie folgt aufgebaut:'''
  
 
* File
 
* File
  
 
** Verbinden
 
** Verbinden
** Trenen
+
** Trennen
** Daten Uploaden
+
** Daten uploaden
** Daten Downloaden
+
** Daten downloaden
 
** Daten Löschen
 
** Daten Löschen
** Verzeichniss Löschen
+
** Verzeichnis löschen
** Verzeichniss Erstellen
+
** Verzeichnis erstellen
  
 
* Edit
 
* Edit
Zeile 87: Zeile 80:
 
=== Variabeln in der Klasse ===
 
=== Variabeln in der Klasse ===
  
<code=java>
+
<syntaxhighlight lang="java">
 
//Suchen nach
 
//Suchen nach
public class main extends javax.swing.JFrame {
+
public class Main extends javax.swing.JFrame {
//hier diese Einträge Darunter Setzen
 
public DefaultListModel mod;
 
public FtpClient ftp;
 
public FtpDirEntry direlement;
 
public DefaultListModel Fmod;
 
public DefaultListModel Cmod;
 
</code=java>
 
  
 +
private DefaultListModel mod;
 +
private FtpClient ftp;
 +
private FtpDirEntry direlement;
 +
private DefaultListModel Fmod;
 +
private DefaultListModel Cmod;
 +
</syntaxhighlight>
  
 
=== Listen Initialisieren ===
 
=== Listen Initialisieren ===
Ich habe So die Listen Initalisiert
+
Im Konstruktor habe ich die Listen initialisiert.
<code=java>
+
<syntaxhighlight lang="java">
public main() {
+
    public Main() {
initComponents();
+
        initComponents();
// Hinzufügen
+
 
mod = new DefaultListModel();
+
        mod = new DefaultListModel();
jList1.setModel(mod);
+
        jList1.setModel(mod);
Fmod = new DefaultListModel();
+
        Fmod = new DefaultListModel();
jList2.setModel(Fmod);
+
        jList2.setModel(Fmod);
Cmod = new DefaultListModel();
+
        Cmod = new DefaultListModel();
jList3.setModel(Cmod);   
+
        jList3.setModel(Cmod);   
 
}
 
}
</code=java>
+
</syntaxhighlight>
  
 
=== Das Verbinden Action Event ===
 
=== Das Verbinden Action Event ===
<code=java>
+
<syntaxhighlight lang="java">
 
// Elemente aus Modellen Löschen
 
// Elemente aus Modellen Löschen
 
         Fmod.removeAllElements();
 
         Fmod.removeAllElements();
Zeile 187: Zeile 179:
 
         Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
         Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
     }
 
     }
</code=java>
+
</syntaxhighlight>
  
 
=== Das Trennen Action Event ===
 
=== Das Trennen Action Event ===
  
<code=java>
+
<syntaxhighlight lang="java">
 
         try {
 
         try {
 
             // TODO add your handling code here:
 
             // TODO add your handling code here:
Zeile 198: Zeile 190:
 
             Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
             Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
         }
 
         }
</code=java>
+
</syntaxhighlight>
  
 
=== Das listview ClickAction Event ===
 
=== Das listview ClickAction Event ===
<code=java>
+
<syntaxhighlight lang="java">
// List Model Deklarieren
+
// ListModel deklarieren
 
     mod = (DefaultListModel) jList1.getModel();
 
     mod = (DefaultListModel) jList1.getModel();
     // Prüfen ob der Client noch Verbunden ist  
+
     // Prüfen, ob der Client noch verbunden ist  
     if(ftp.isConnected()==true){
+
     if(ftp.isConnected()){
         //prüfen ob wir noch eingelogt sind
+
         //prüfen ob wir noch eingeloggt sind
         if(ftp.isLoggedIn()==true){
+
         if(ftp.isLoggedIn()){
 
             try {
 
             try {
                 //Verzeichniss Wechselen
+
                 //Verzeichniss wechseln
 
                 ftp.changeDirectory(jList1.getSelectedValue().toString());
 
                 ftp.changeDirectory(jList1.getSelectedValue().toString());
                 // System giebt aus das das Verzeichniss gewechselt wurde
+
                 // System gibt, aus dass das Verzeichniss gewechselt wurde
                 Cmod.addElement("Verzeichniss Gewechelt nach: " + ftp.getWorkingDirectory());
+
                 Cmod.addElement("Verzeichnis gewechelt nach: " + ftp.getWorkingDirectory());
                 System.out.print("Verzeichniss Gewechselt nach :" + ftp.getWorkingDirectory());
+
                 System.out.print("Verzeichnis gewechselt nach :" + ftp.getWorkingDirectory());
                 // wir Listen die Files in dem Neune Verzeichniss
+
                 // wir listen die Files aus dem neuen Verzeichnis
 
                 Iterator<FtpDirEntry> dirs = ftp.listFiles(ftp.getWorkingDirectory());
 
                 Iterator<FtpDirEntry> dirs = ftp.listFiles(ftp.getWorkingDirectory());
                 // wir Löschen die Alten List items
+
                 // wir löschen die alten list items
 
                 mod.removeAllElements();
 
                 mod.removeAllElements();
 
                 Fmod.removeAllElements();
 
                 Fmod.removeAllElements();
                 // Wir Tragen die Verzeichniss ein
+
                 // Wir tragen die Verzeichnisse ein
 
                 while(dirs.hasNext()){
 
                 while(dirs.hasNext()){
                     // wir Deklarieren das Element
+
                     // wir deklarieren das Element
 
                     direlement=dirs.next();
 
                     direlement=dirs.next();
                     // Wir Prüfen ob das Element ein Verzeichniss ist
+
                     // Wir prüfen, ob das Element ein Verzeichnis ist
 
                     if(direlement.getType()==FtpDirEntry.Type.DIR){
 
                     if(direlement.getType()==FtpDirEntry.Type.DIR){
 
                         // wir fügen den Verzeichniss namen in die Liste ein
 
                         // wir fügen den Verzeichniss namen in die Liste ein
Zeile 231: Zeile 223:
 
                         Fmod.addElement(direlement.getName());
 
                         Fmod.addElement(direlement.getName());
 
                     }
 
                     }
                }
+
                }
 
   
 
   
 
             } catch (FtpProtocolException ex) {
 
             } catch (FtpProtocolException ex) {
Zeile 240: Zeile 232:
 
         }
 
         }
 
     }
 
     }
</code=java>
+
</syntaxhighlight>
 
 
  
 
=== das Multi Download ActionEvent ===
 
=== das Multi Download ActionEvent ===
  
<code=java>
+
<syntaxhighlight lang="java">
// Wir Deklarieren den FileChooser
+
// Wir deklarieren den JFileChooser
 
     JFileChooser sfd = new JFileChooser();
 
     JFileChooser sfd = new JFileChooser();
     // Wir schreiben in das Datenfeld Bitte Wählen, da wir nur das Verzeichniss Benötigen
+
     // Wir schreiben in das Datenfeld >>Bitte Wählen<<, da wir nur das Verzeichnis benötigen
 
     sfd.setSelectedFile(new File("Bitte Wählen"));
 
     sfd.setSelectedFile(new File("Bitte Wählen"));
     //Wenn Ok Gedrückt Wurde
+
     //Wenn Ok gedrückt Wurde
 
     if(sfd.showSaveDialog(sfd) == JFileChooser.APPROVE_OPTION){
 
     if(sfd.showSaveDialog(sfd) == JFileChooser.APPROVE_OPTION){
         // list erstellen mit Unseren Ausgewählten Daten
+
         // list erstellen mit unseren ausgewählten Daten
 
         Object[] flist = jList2.getSelectedValues();
 
         Object[] flist = jList2.getSelectedValues();
 
         for(int i = 0; i < flist.length; i++){
 
         for(int i = 0; i < flist.length; i++){
 
   
 
   
 
             try {
 
             try {
                 // wir geben Aus welche File wir Downloaden möchten
+
                 // wir geben aus, welche Files wir downloaden möchten
 
                 Cmod.addElement("Get file " + flist[i] + " from Curent Directory " + ftp.getWorkingDirectory());
 
                 Cmod.addElement("Get file " + flist[i] + " from Curent Directory " + ftp.getWorkingDirectory());
 
                 System.out.println("Get file " + flist[i] + " from Curent Directory " + ftp.getWorkingDirectory());
 
                 System.out.println("Get file " + flist[i] + " from Curent Directory " + ftp.getWorkingDirectory());
                 // neue File Erstellen
+
                 // neue Files erstellen
 
                 File f = new File(sfd.getSelectedFile().getParent() + "/" + flist[i]);
 
                 File f = new File(sfd.getSelectedFile().getParent() + "/" + flist[i]);
                 // Output Stream Erstellen
+
                 // OutputStream erstellen
 
                 FileOutputStream os = new FileOutputStream(f);
 
                 FileOutputStream os = new FileOutputStream(f);
                 // Datei Herunterladen
+
                 // Datei herunterladen
 
                 ftp.getFile(ftp.getWorkingDirectory() + "/" +flist[i], os);
 
                 ftp.getFile(ftp.getWorkingDirectory() + "/" +flist[i], os);
                 // Server Antwortet auf unsere Anfrage
+
                 // Server antwortet auf unsere Anfrage
 
                 Cmod.addElement("Server: " + ftp.getLastResponseString());
 
                 Cmod.addElement("Server: " + ftp.getLastResponseString());
 
                 System.out.println("Server: " + ftp.getLastResponseString());
 
                 System.out.println("Server: " + ftp.getLastResponseString());
Zeile 279: Zeile 270:
 
   
 
   
 
         }
 
         }
         // Ausgeben Das der Download Beendet wurde
+
         // Ausgeben, dass der Download abgeschlossen wurde
         Cmod.addElement("Download Vorgang Beendet");
+
         Cmod.addElement("Download Vorgang abgeschlossen");
         System.out.println("Download Vorgang Beendet");
+
         System.out.println("Download Vorgang abgeschlossen");
 
     }
 
     }
</code=java>
+
</syntaxhighlight>
 
 
  
 
=== Das Multi Upload Action Event ===
 
=== Das Multi Upload Action Event ===
  
<code=java>
+
<syntaxhighlight lang="java">
//Wir erstellen einen Filechooser zum Wählen der Daten
+
//Wir erstellen einen JFilechooser zum Wählen der Daten
 
         JFileChooser ofd = new JFileChooser();
 
         JFileChooser ofd = new JFileChooser();
         //mehrfach auswahl Aktivieren
+
         //Mehrfachauswahl aktivieren
 
         ofd.setMultiSelectionEnabled(true);
 
         ofd.setMultiSelectionEnabled(true);
         // Wenn im Filechooser auf Ok geklickt wird
+
         // Wenn im JFileChooser auf Ok geklickt wird
 
         if(ofd.showOpenDialog(ofd)==JFileChooser.APPROVE_OPTION){
 
         if(ofd.showOpenDialog(ofd)==JFileChooser.APPROVE_OPTION){
             // Wir Erstellen eine Filelist die unsere Gewählten files Beinhaltet
+
             // Wir erstellen eine Filelist, die unsere gewählten Files beinhaltet
 
             File[] flist = ofd.getSelectedFiles();
 
             File[] flist = ofd.getSelectedFiles();
             // Wir laden jede Einzelne File hoch
+
             // Wir laden jedes einzelne File hoch
 
             for(int i = 0 ; i<flist.length;i++){
 
             for(int i = 0 ; i<flist.length;i++){
 
                 try {
 
                 try {
                     // hiier Deklarieren wir die File
+
                     // hier deklarieren wir die Files
 
                     File f = flist[i];
 
                     File f = flist[i];
 
                     // Info für Console
 
                     // Info für Console
 
                     Cmod.addElement("Put File " + f.getName() + " in to " + ftp.getWorkingDirectory() + " directory");
 
                     Cmod.addElement("Put File " + f.getName() + " in to " + ftp.getWorkingDirectory() + " directory");
 
                     System.out.println("Put File " + f.getName() + " in to " + ftp.getWorkingDirectory() + " directory");
 
                     System.out.println("Put File " + f.getName() + " in to " + ftp.getWorkingDirectory() + " directory");
                     // Wir erstellen einen Fileinputstream zum Auslesen der Datei
+
                     // Wir erstellen einen FileInputStream zum Auslesen der Datei
 
                     FileInputStream is = new FileInputStream(f);
 
                     FileInputStream is = new FileInputStream(f);
                     // Nun wird die Datei ochgeladen
+
                     // Nun wird die Datei hochgeladen
 
                     ftp.putFile(ftp.getWorkingDirectory() + "/" + f.getName(), is);
 
                     ftp.putFile(ftp.getWorkingDirectory() + "/" + f.getName(), is);
                     // Console giebt server Nachricht aus
+
                     // Console gibt Server-Nachricht aus
 
                     Cmod.addElement("Server: " +ftp.getLastResponseString());
 
                     Cmod.addElement("Server: " +ftp.getLastResponseString());
 
                     System.out.println("Server: " +ftp.getLastResponseString());
 
                     System.out.println("Server: " +ftp.getLastResponseString());
Zeile 321: Zeile 311:
 
   
 
   
 
             }
 
             }
             // Console giebt aus das Übertragung beendet Wurde
+
             // Console gibt aus, dass Übertragung beendet wurde
             Cmod.addElement("Übertragung der Files " + flist.toString() + " Beendet");
+
             Cmod.addElement("Übertragung der Files " + flist.toString() + " abgeschlossen");
             System.out.println("Übertragung der Files " + flist.toString() + " Beendet");
+
             System.out.println("Übertragung der Files " + flist.toString() + " abgeschlossen");
 
         }
 
         }
</code=java>
+
</syntaxhighlight>
 
 
  
 
=== Das Übergerordneter Ordner Event ===
 
=== Das Übergerordneter Ordner Event ===
<code=java>
+
<syntaxhighlight lang="java">
// Elemente Entfernen
+
// Elemente entfernen
 
             mod.removeAllElements();
 
             mod.removeAllElements();
 
             Fmod.removeAllElements();
 
             Fmod.removeAllElements();
 
   
 
   
             // FtpDirEntry Deklarieren
+
             // FtpDirEntry deklarieren
 
             FtpDirEntry dir;         
 
             FtpDirEntry dir;         
             // Verzeichniss Wechseln
+
             // Verzeichnis wechseln
 
             ftp.changeToParentDirectory();       
 
             ftp.changeToParentDirectory();       
             // Neues Verzeichniss in Console Ausgeben
+
             // Neues Verzeichnis in Console ausgeben
             Cmod.addElement("Aktuelles Verzeichniss " + ftp.getWorkingDirectory());
+
             Cmod.addElement("Aktuelles Verzeichnis " + ftp.getWorkingDirectory());
 
   
 
   
             // Verzeichnisse in eine FtpDirEntry List hinzufügen
+
             // Verzeichnisse einer FtpDirEntry-List hinzufügen
 
             Iterator<FtpDirEntry> dirlist = ftp.listFiles(ftp.getWorkingDirectory());
 
             Iterator<FtpDirEntry> dirlist = ftp.listFiles(ftp.getWorkingDirectory());
 
   
 
   
             // Jedes Verzeichniss Ausgeben
+
             // Jedes Verzeichnis ausgeben
 
             while(dirlist.hasNext()){
 
             while(dirlist.hasNext()){
                 // dir elemnt Deklarieren
+
                 // dir Element deklarieren
 
                 dir=dirlist.next();
 
                 dir=dirlist.next();
 
   
 
   
 
                 // ist dir ein Ordner ?
 
                 // ist dir ein Ordner ?
                 if(dir.getType()==FtpDirEntry.Type.DIR){
+
                 if(dir.getType() == FtpDirEntry.Type.DIR){
                     // wenn ja dan in List 1
+
                     // wenn ja, dann in List 1
 
                     mod.addElement(dir.getName());
 
                     mod.addElement(dir.getName());
 
                 }
 
                 }
                 // Ist dir eine Datei ?
+
                 // ist dir eine Datei ?
                 if(dir.getType()==FtpDirEntry.Type.FILE){
+
                 else if(dir.getType() == FtpDirEntry.Type.FILE){
                     // wenn ja dan in List 2
+
                     // wenn ja, dann in List 2
 
                     Fmod.addElement(dir.getName());
 
                     Fmod.addElement(dir.getName());
 
                 }
 
                 }
Zeile 367: Zeile 356:
 
             Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
             Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
         }
 
         }
</code=java>
+
</syntaxhighlight>
 
 
  
 
=== Das Datei Löschen Event ===
 
=== Das Datei Löschen Event ===
  
<code=java>
+
<syntaxhighlight lang="java">
 
try {
 
try {
 
             // TODO add your handling code here:
 
             // TODO add your handling code here:
 
   
 
   
             // Wir Schreiben in die Console das Wir die Datei Löschen
+
             // Wir schreiben in die Console, dass wir die Datei löschen
 
             Cmod.addElement("Delete File " + ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
 
             Cmod.addElement("Delete File " + ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
 
             System.out.println("Delete File " + ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
 
             System.out.println("Delete File " + ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
 
   
 
   
             // Wir Löschen die Datei
+
             // Wir löschen die Datei
 
             ftp.deleteFile(ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
 
             ftp.deleteFile(ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
 
   
 
   
             // Wir Geben die Server Antwort aus
+
             // Wir geben die Server-Antwort aus
 
             Cmod.addElement("Server: "+ ftp.getLastResponseString());
 
             Cmod.addElement("Server: "+ ftp.getLastResponseString());
 
             System.out.println("Server: "+ ftp.getLastResponseString());
 
             System.out.println("Server: "+ ftp.getLastResponseString());
Zeile 392: Zeile 380:
 
             Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
             Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
         }
 
         }
</code=java>
+
</syntaxhighlight>
  
=== Das Verzeichniss Löschen Event ===
+
=== Das Event zum Verzeichnis Löschen ===
  
<code=java>
+
<syntaxhighlight lang="java">
 
try {
 
try {
 
             // TODO add your handling code here:
 
             // TODO add your handling code here:
                 // Wir Schreiben in die Console das Wir das Verzeichniss Löschen
+
                 // Wir schreiben in die Console, dass wir das Verzeichnis löschen
 
                 Cmod.addElement("Delete Directory " + ftp.getWorkingDirectory());
 
                 Cmod.addElement("Delete Directory " + ftp.getWorkingDirectory());
 
                 System.out.println("Delete Directory " + ftp.getWorkingDirectory());
 
                 System.out.println("Delete Directory " + ftp.getWorkingDirectory());
 
   
 
   
                 // Wir Löschen Das Verzeichniss
+
                 // Wir löschen das Verzeichnis
 
                 ftp.removeDirectory(ftp.getWorkingDirectory());
 
                 ftp.removeDirectory(ftp.getWorkingDirectory());
 
   
 
   
Zeile 417: Zeile 405:
 
             Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
             Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
 
         }
 
         }
</code=java>
+
</syntaxhighlight>
 
 
  
 
=== Das Verzeichniss Erstellen Event ===
 
=== Das Verzeichniss Erstellen Event ===
<code=java>
+
<syntaxhighlight lang="java">
 
// Deklarieren der Elemente
 
// Deklarieren der Elemente
 
         JDialog dia = new JDialog();
 
         JDialog dia = new JDialog();
 
         dia.setSize(375, 110);
 
         dia.setSize(375, 110);
 
         dia.setLayout(null);
 
         dia.setLayout(null);
         dia.setTitle("Neues Verzeichniss anlegen");
+
         dia.setTitle("Neues Verzeichnis anlegen");
 
         JButton b = new JButton("Erstellen");
 
         JButton b = new JButton("Erstellen");
 
         final JTextField textfield = new JTextField();
 
         final JTextField textfield = new JTextField();
Zeile 437: Zeile 424:
 
   
 
   
 
   
 
   
         // Füge Controls Hinzu
+
         // Füge Controls hinzu
 
         dia.add(textfield);
 
         dia.add(textfield);
 
         dia.add(b);
 
         dia.add(b);
 
         dia.setVisible(true);
 
         dia.setVisible(true);
 
   
 
   
         // Action Listner auf Button Legen
+
         // ActionListener am Button anmelden
 
         b.addActionListener(new ActionListener(){
 
         b.addActionListener(new ActionListener(){
 
         public void actionPerformed(ActionEvent e){
 
         public void actionPerformed(ActionEvent e){
 
             try {
 
             try {
 
   
 
   
                 // Console Giebt aus das wir ein Verzeichniss Erstellen
+
                 // Console gibt aus, dass wir ein Verzeichnis erstellen
 
                 Cmod.addElement("Create Dir " + ftp.getWorkingDirectory() + "/" + textfield.getText());
 
                 Cmod.addElement("Create Dir " + ftp.getWorkingDirectory() + "/" + textfield.getText());
 
                 System.out.println("Create Dir " + ftp.getWorkingDirectory() + "/" + textfield.getText());
 
                 System.out.println("Create Dir " + ftp.getWorkingDirectory() + "/" + textfield.getText());
 
   
 
   
                 // Wir Erstellen das Verzeichniss
+
                 // Wir erstellen das Verzeichnis
 
                 ftp.makeDirectory(ftp.getWorkingDirectory() + "/" + textfield.getText());
 
                 ftp.makeDirectory(ftp.getWorkingDirectory() + "/" + textfield.getText());
 
   
 
   
                 // Wir Geben die System Nachricht aus  
+
                 // Wir geben die Systemnachricht aus  
 
                 Cmod.addElement("Server: "+ ftp.getLastResponseString());
 
                 Cmod.addElement("Server: "+ ftp.getLastResponseString());
 
                 System.out.println("Server: "+ ftp.getLastResponseString());
 
                 System.out.println("Server: "+ ftp.getLastResponseString());
Zeile 467: Zeile 454:
 
         }
 
         }
 
         });
 
         });
</code=java>
+
</syntaxhighlight>
 +
 
 +
 
 +
Natürlich könnte man noch X-Funktionen einfügen, aber den Spaß überlasse ich jetzt euch. =)
 +
 
 +
== Quellen - Mitwirkende ==
 +
 
 +
* Martin - aus einem anderem Forum (das leider nicht mehr existiert)
 +
 
 +
== Änderungen & Hystorie ==
 +
Ich würde mich freuen, wenn man die Bearbeitung kennzeichnet - also wie ich.
  
 +
* 22.08.2013 - Info von [[Benutzer:L-ectron-X|L-ectron-X]]: Dafür gibt es [http://wiki.byte-welt.net/mediawiki/index.php?title=Ftp-Client_Tutorial&action=history Versionen/Autoren]
 +
* 17.08.2013 - Bild hinzugefügt - [[Benutzer:Andy16823|Andy16823]]
  
Das war der Letzte Teil des Toturials natürlich Könnte man noch X-Funktionen einfügen aber den Spaß überlasse ich euch. Auf Anfrage Sende ich Auch gerne Die Sourcecodes Zu, einfach im Forum eine PN an Andy16823
+
[[Kategorie:Tutorials (Java)]]

Aktuelle Version vom 4. Mai 2018, 08:45 Uhr

Java Ftp Client Tutorial

Mache mich mal dran ein Ftp Tutorial zu schreiben. In unserem Tutorial erstellen wir einen FTP Server. Wir verwenden für Das Tutorial die mitgelieferte Klasse aus der neusten Java Version. Für dieses Tutorial solltest du die Grundlagen von Java kennen. Auch empfehle ich eine IDE zu benutzen, die über einen Designer verfügt.

Importe

import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpDirEntry;
import sun.net.ftp.FtpProtocolException;


Das Frame

Ich habe bei mir das Frame mit einer IDE geschrieben, die einen Designer verwendet, aber erfahrene Java Programmierer sollten dies auch in wenigen Minuten mit einer IDE, die ohne Designer arbeitet hinbekommen.

In dem folgenden Bild zeige ich, wie ich das Frame aufgebaut habe.

Das Frame

Wie man sieht, befinden sich auf dem JFrame drei Listen und eine MenuBar mit zwei Menüs, drei JTextFields, einem JPasswortField und einem JButton. Ich habe folgende ListModels den jeweiligen Listen zugeordnet:


  • Liste1 (DefaultListModel) mod (zeigt die Verzeichnisse an und verfügt über ein ActionEvent)
  • Liste2 (DefaultListModel) Fmod (zeigt die Dateien aus dem aktuellen Verzeichnis an.)
  • Liste3 (DefaultListModel) Cmod (dient als interne Console)


Die Textfelder werden wie folgt verwendet

  • TextFeld1 - hier wird der Server angegeben
  • Textfeld2 - hier wird der Port angegeben (Bei FTP-Servern ist dies standardmäßig Port 21)
  • Textfeld3 - hier wird der Benutzername eingegeben
  • PasswordFeld1 - ein Eingabefeld für das Passwort.


Das Menü ist wie folgt aufgebaut:

  • File
    • Verbinden
    • Trennen
    • Daten uploaden
    • Daten downloaden
    • Daten Löschen
    • Verzeichnis löschen
    • Verzeichnis erstellen
  • Edit
    • Übergeordneter Ordner

Die Codes

Variabeln in der Klasse

//Suchen nach
public class Main extends javax.swing.JFrame {

	private DefaultListModel mod;
	private FtpClient ftp;
	private FtpDirEntry direlement;
	private DefaultListModel Fmod;
	private DefaultListModel Cmod;

Listen Initialisieren

Im Konstruktor habe ich die Listen initialisiert.

    public Main() {
        initComponents();

        mod = new DefaultListModel();
        jList1.setModel(mod);
        Fmod = new DefaultListModel();
        jList2.setModel(Fmod);
        Cmod = new DefaultListModel();
        jList3.setModel(Cmod);  
}

Das Verbinden Action Event

// Elemente aus Modellen Löschen
        	Fmod.removeAllElements();
        	mod.removeAllElements();
        	// deklariren
        	// Deklarieren des List Models
        	mod = (DefaultListModel) jList1.getModel();
        	// holen des Inhaltes aus der Server Text Box
        	String servUrl=jTextField1.getText();
        	// holen des Inhaltes aus der Port Text Box
        	int port=Integer.parseInt(jTextField2.getText());
        	// Internet Adresse umwandln in IP
        	String ipAdr = InetAddress.getByName(servUrl).getHostAddress();
        	// Consolen Anzeige
        	Cmod.addElement("Encode Adresse " + servUrl + " in IP Adresse " + ipAdr);
        	System.out.println("Endode Addresse in IP: " + ipAdr);   	
        	// Socket Addresse Deklarieren
        	SocketAddress sAdr = new InetSocketAddress(ipAdr,port);
        	// Deklarieren des ftpClients
        	ftp =  FtpClient.create();
 
        	// Benutzername Festelgen
        	String userName = jTextField3.getText();
 
        	//Verbindung Aufbauen
        	ftp.connect(sAdr);
        	//Wen Verbindung Besteht, einlogen
        	if(ftp.isConnected()==true){
            	// Console giebt aus das wir uns erfolgreich verbunden haben
            	Cmod.addElement("Erfolgreich mit Server " + ipAdr + " Verbunden");
            	System.out.println("Erfolgreich mit Server " + ipAdr + " Verbunden");
             	// Wir lassen Uns die Begrüßungsnachricht ausgeben
            	System.out.print(ftp.getWelcomeMsg());
            	Cmod.addElement(ftp.getWelcomeMsg());
            	// Hier Loggen wir uns in den Server ein
            	ftp.login(userName, jPasswordField1.getPassword());
            	// Wenn wir Eingelogt Sind 
            	if(ftp.isLoggedIn()==true){
                	// Wir Bekommen eine nachricht vom Server das wir uns Erfolgreich Eingelogt sind
                	Cmod.addElement("User " + userName + " Access Garanted");
                	System.out.println("User: " + userName + " ist erfolgreich im Server eingelogt");
                	// Nun deklarieren wir unser Aktuelles Verzeichniss
                	String dir = ftp.getWorkingDirectory();
                	// Nun lesen wir die Verzeichnisse Aus
                	Iterator<FtpDirEntry> dirlist = ftp.listFiles(dir);
                	// Listview Model leeren
                	mod.removeAllElements();
                	// hinzufügen der neune Verzeichnisse
                	while(dirlist.hasNext()){
                   	// elemnt in die DirEntry hinzufügen
                   	direlement = dirlist.next();
                   	// Prüfen ob es ein Verzeichniss ist
                   	if(direlement.getType()==FtpDirEntry.Type.DIR){
                       	// in Model Hinzufügen
                       	mod.addElement(direlement.getName());
                   	}
                   	if(direlement.getType()==FtpDirEntry.Type.FILE){
                       	Fmod.addElement(direlement.getName());
                   	}
                	}
            	}
        	}
 
 
 
    	} catch (UnknownHostException ex) {
        	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
    	} catch (FtpProtocolException ex) {
        	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
    	} catch (IOException ex) {
        	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
    	}

Das Trennen Action Event

        try {
            // TODO add your handling code here:
            ftp.close();
        } catch (IOException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        }

Das listview ClickAction Event

// ListModel deklarieren
    	mod = (DefaultListModel) jList1.getModel();
    	// Prüfen, ob der Client noch verbunden ist 
    	if(ftp.isConnected()){
        	//prüfen ob wir noch eingeloggt sind
        	if(ftp.isLoggedIn()){
            	try {
                	//Verzeichniss wechseln
                	ftp.changeDirectory(jList1.getSelectedValue().toString());
                	// System gibt, aus dass das Verzeichniss gewechselt wurde
                	Cmod.addElement("Verzeichnis gewechelt nach: " + ftp.getWorkingDirectory());
                	System.out.print("Verzeichnis gewechselt nach :" + ftp.getWorkingDirectory());
                	// wir listen die Files aus dem neuen Verzeichnis
                	Iterator<FtpDirEntry> dirs = ftp.listFiles(ftp.getWorkingDirectory());
                	// wir löschen die alten list items
                	mod.removeAllElements();
                	Fmod.removeAllElements();
                	// Wir tragen die Verzeichnisse ein
                	while(dirs.hasNext()){
                    	// wir deklarieren das Element
                    	direlement=dirs.next();
                    	// Wir prüfen, ob das Element ein Verzeichnis ist
                    	if(direlement.getType()==FtpDirEntry.Type.DIR){
                        	// wir fügen den Verzeichniss namen in die Liste ein
                        	mod.addElement(direlement.getName());
                    	}
                    	else if(direlement.getType()==FtpDirEntry.Type.FILE){
                        	Fmod.addElement(direlement.getName());
                    	}
                }
 
            	} catch (FtpProtocolException ex) {
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            	} catch (IOException ex) {
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            	}
        	}
    	}

das Multi Download ActionEvent

// Wir deklarieren den JFileChooser
    	JFileChooser sfd = new JFileChooser();
    	// Wir schreiben in das Datenfeld >>Bitte Wählen<<, da wir nur das Verzeichnis benötigen
    	sfd.setSelectedFile(new File("Bitte Wählen"));
    	//Wenn Ok gedrückt Wurde
    	if(sfd.showSaveDialog(sfd) == JFileChooser.APPROVE_OPTION){
        	// list erstellen mit unseren ausgewählten Daten
        	Object[] flist = jList2.getSelectedValues();
        	for(int i = 0; i < flist.length; i++){
 
            	try {
                	// wir geben aus, welche Files wir downloaden möchten
                	Cmod.addElement("Get file " + flist[i] + " from Curent Directory " + ftp.getWorkingDirectory());
                	System.out.println("Get file " + flist[i] + " from Curent Directory " + ftp.getWorkingDirectory());
                	// neue Files erstellen
                	File f = new File(sfd.getSelectedFile().getParent() + "/" + flist[i]);
                	// OutputStream erstellen
                	FileOutputStream os = new FileOutputStream(f);
                	// Datei herunterladen
                	ftp.getFile(ftp.getWorkingDirectory() + "/" +flist[i], os);
                	// Server antwortet auf unsere Anfrage
                	Cmod.addElement("Server: " + ftp.getLastResponseString());
                	System.out.println("Server: " + ftp.getLastResponseString());
            	} catch (FileNotFoundException ex) {
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            	} catch (FtpProtocolException ex) {
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            	} catch (IOException ex) {
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            	}
 
 
        	}
        	// Ausgeben, dass der Download abgeschlossen wurde
        	Cmod.addElement("Download Vorgang abgeschlossen");
        	System.out.println("Download Vorgang abgeschlossen");
    	}

Das Multi Upload Action Event

//Wir erstellen einen JFilechooser zum Wählen der Daten
        JFileChooser ofd = new JFileChooser();
        //Mehrfachauswahl aktivieren
        ofd.setMultiSelectionEnabled(true);
        // Wenn im JFileChooser auf Ok geklickt wird
        if(ofd.showOpenDialog(ofd)==JFileChooser.APPROVE_OPTION){
            // Wir erstellen eine Filelist, die unsere gewählten Files beinhaltet
            File[] flist = ofd.getSelectedFiles();
            // Wir laden jedes einzelne File hoch
            for(int i = 0 ; i<flist.length;i++){
                try {
                    // hier deklarieren wir die Files
                    File f = flist[i];
                    // Info für Console
                    Cmod.addElement("Put File " + f.getName() + " in to " + ftp.getWorkingDirectory() + " directory");
                    System.out.println("Put File " + f.getName() + " in to " + ftp.getWorkingDirectory() + " directory");
                    // Wir erstellen einen FileInputStream zum Auslesen der Datei
                    FileInputStream is = new FileInputStream(f);
                    // Nun wird die Datei hochgeladen
                    ftp.putFile(ftp.getWorkingDirectory() + "/" + f.getName(), is);
                    // Console gibt Server-Nachricht aus
                    Cmod.addElement("Server: " +ftp.getLastResponseString());
                    System.out.println("Server: " +ftp.getLastResponseString());
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
                } catch (FtpProtocolException ex) {
                    Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
                }
 
            }
            // Console gibt aus, dass Übertragung beendet wurde
            Cmod.addElement("Übertragung der Files " + flist.toString() + " abgeschlossen");
            System.out.println("Übertragung der Files " + flist.toString() + " abgeschlossen");
        }

Das Übergerordneter Ordner Event

// Elemente entfernen
            mod.removeAllElements();
            Fmod.removeAllElements();
 
            // FtpDirEntry deklarieren
            FtpDirEntry dir;         
            // Verzeichnis wechseln
            ftp.changeToParentDirectory();       
            // Neues Verzeichnis in Console ausgeben
            Cmod.addElement("Aktuelles Verzeichnis " + ftp.getWorkingDirectory());
 
            // Verzeichnisse einer FtpDirEntry-List hinzufügen
            Iterator<FtpDirEntry> dirlist = ftp.listFiles(ftp.getWorkingDirectory());
 
            // Jedes Verzeichnis ausgeben
            while(dirlist.hasNext()){
                // dir Element deklarieren
                dir=dirlist.next();
 
                // ist dir ein Ordner ?
                if(dir.getType() == FtpDirEntry.Type.DIR){
                    // wenn ja, dann in List 1
                    mod.addElement(dir.getName());
                }
                // ist dir eine Datei ?
                else if(dir.getType() == FtpDirEntry.Type.FILE){
                    // wenn ja, dann in List 2
                    Fmod.addElement(dir.getName());
                }
            }
 
 
        } catch (FtpProtocolException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        }

Das Datei Löschen Event

try {
            // TODO add your handling code here:
 
            // Wir schreiben in die Console, dass wir die Datei löschen
            Cmod.addElement("Delete File " + ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
            System.out.println("Delete File " + ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
 
            // Wir löschen die Datei
            ftp.deleteFile(ftp.getWorkingDirectory() + "/" + jList2.getSelectedValue().toString());
 
            // Wir geben die Server-Antwort aus
            Cmod.addElement("Server: "+ ftp.getLastResponseString());
            System.out.println("Server: "+ ftp.getLastResponseString());
 
        } catch (FtpProtocolException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        }

Das Event zum Verzeichnis Löschen

try {
            // TODO add your handling code here:
                // Wir schreiben in die Console, dass wir das Verzeichnis löschen
                Cmod.addElement("Delete Directory " + ftp.getWorkingDirectory());
                System.out.println("Delete Directory " + ftp.getWorkingDirectory());
 
                // Wir löschen das Verzeichnis
                ftp.removeDirectory(ftp.getWorkingDirectory());
 
                // Wir Geben die Server Antwort aus
                Cmod.addElement("Server: "+ ftp.getLastResponseString());
                System.out.println("Server: "+ ftp.getLastResponseString());
 
 
 
        } catch (FtpProtocolException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        }

Das Verzeichniss Erstellen Event

// Deklarieren der Elemente
        JDialog dia = new JDialog();
        dia.setSize(375, 110);
        dia.setLayout(null);
        dia.setTitle("Neues Verzeichnis anlegen");
        JButton b = new JButton("Erstellen");
        final JTextField textfield = new JTextField();
 
        // Platzieren der Elemente
        textfield.setLocation(25, 25);
        textfield.setSize(200, 20);
        b.setLocation(235, 25);
        b.setSize(100,20);
 
 
        // Füge Controls hinzu
        dia.add(textfield);
        dia.add(b);
        dia.setVisible(true);
 
        // ActionListener am Button anmelden
        b.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            try {
 
                // Console gibt aus, dass wir ein Verzeichnis erstellen
                Cmod.addElement("Create Dir " + ftp.getWorkingDirectory() + "/" + textfield.getText());
                System.out.println("Create Dir " + ftp.getWorkingDirectory() + "/" + textfield.getText());
 
                // Wir erstellen das Verzeichnis
                ftp.makeDirectory(ftp.getWorkingDirectory() + "/" + textfield.getText());
 
                // Wir geben die Systemnachricht aus 
                Cmod.addElement("Server: "+ ftp.getLastResponseString());
                System.out.println("Server: "+ ftp.getLastResponseString());
 
 
            } catch (FtpProtocolException ex) {
                Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            }
 
        }
        });


Natürlich könnte man noch X-Funktionen einfügen, aber den Spaß überlasse ich jetzt euch. =)

Quellen - Mitwirkende

  • Martin - aus einem anderem Forum (das leider nicht mehr existiert)

Änderungen & Hystorie

Ich würde mich freuen, wenn man die Bearbeitung kennzeichnet - also wie ich.