Ftp-Client Tutorial: Unterschied zwischen den Versionen
(→Das Frame) |
(→Java Ftp Client Tutorial) |
||
Zeile 1: | Zeile 1: | ||
= Java Ftp Client Tutorial = | = Java Ftp Client Tutorial = | ||
− | Mache mich mal drann um ein Ftp Tutorial zu Schreiben. | + | 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. |
Version vom 17. August 2013, 18:21 Uhr
Inhaltsverzeichnis
- 1 Java Ftp Client Tutorial
- 1.1 Importierungen
- 1.2 Das Frame
- 1.3 Die Codes
- 1.3.1 Variabeln in der Klasse
- 1.3.2 Listen Initialisieren
- 1.3.3 Das Verbinden Action Event
- 1.3.4 Das Trennen Action Event
- 1.3.5 Das listview ClickAction Event
- 1.3.6 das Multi Download ActionEvent
- 1.3.7 Das Multi Upload Action Event
- 1.3.8 Das Übergerordneter Ordner Event
- 1.3.9 Das Datei Löschen Event
- 1.3.10 Das Verzeichniss Löschen Event
- 1.3.11 Das Verzeichniss Erstellen Event
Java Ftp Client Tutorial
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.
Importierungen
<code=java> 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; </code=java>
Das Frame
Ich habe bei mir das Frame mit einer IDE Geschrieben die einen Desingner Verwendet, aber erfahrene Java Programmierer Sollten dies auch in Wenigen Minuten mit einer IDE die Ohne Designer Arbeitet hinbekommen. In dem Bild seht Ihr wie ich das Frame Aufgebaut habe.
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
- 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)
Die Textfelder Werden folgt Verwendet
- TextFeld1 Hier wird der Server Angegeben
- 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.
Das Menü ist Aufgebaut in
- File
- Verbinden
- Trenen
- Daten Uploaden
- Daten Downloaden
- Daten Löschen
- Verzeichniss Löschen
- Verzeichniss Erstellen
- Edit
- Übergeordneter Ordner
Die Codes
Variabeln in der Klasse
<code=java> //Suchen nach 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>
Listen Initialisieren
Ich habe So die Listen Initalisiert <code=java> public main() { initComponents(); // Hinzufügen mod = new DefaultListModel(); jList1.setModel(mod); Fmod = new DefaultListModel(); jList2.setModel(Fmod); Cmod = new DefaultListModel(); jList3.setModel(Cmod); } </code=java>
Das Verbinden Action Event
<code=java> // 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); }
</code=java>
Das Trennen Action Event
<code=java>
try { // TODO add your handling code here: ftp.close(); } catch (IOException ex) { Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex); }
</code=java>
Das listview ClickAction Event
<code=java> // List Model Deklarieren
mod = (DefaultListModel) jList1.getModel(); // Prüfen ob der Client noch Verbunden ist if(ftp.isConnected()==true){ //prüfen ob wir noch eingelogt sind if(ftp.isLoggedIn()==true){ try { //Verzeichniss Wechselen ftp.changeDirectory(jList1.getSelectedValue().toString()); // System giebt aus das das Verzeichniss gewechselt wurde Cmod.addElement("Verzeichniss Gewechelt nach: " + ftp.getWorkingDirectory()); System.out.print("Verzeichniss Gewechselt nach :" + ftp.getWorkingDirectory()); // wir Listen die Files in dem Neune Verzeichniss Iterator<FtpDirEntry> dirs = ftp.listFiles(ftp.getWorkingDirectory()); // wir Löschen die Alten List items mod.removeAllElements(); Fmod.removeAllElements(); // Wir Tragen die Verzeichniss ein while(dirs.hasNext()){ // wir Deklarieren das Element direlement=dirs.next(); // Wir Prüfen ob das Element ein Verzeichniss 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); } } }
</code=java>
das Multi Download ActionEvent
<code=java> // Wir Deklarieren den FileChooser
JFileChooser sfd = new JFileChooser(); // Wir schreiben in das Datenfeld Bitte Wählen, da wir nur das Verzeichniss 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 File 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 File Erstellen File f = new File(sfd.getSelectedFile().getParent() + "/" + flist[i]); // Output Stream 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 Das der Download Beendet wurde Cmod.addElement("Download Vorgang Beendet"); System.out.println("Download Vorgang Beendet"); }
</code=java>
Das Multi Upload Action Event
<code=java> //Wir erstellen einen Filechooser zum Wählen der Daten
JFileChooser ofd = new JFileChooser(); //mehrfach auswahl Aktivieren ofd.setMultiSelectionEnabled(true); // Wenn im Filechooser 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 jede Einzelne File hoch for(int i = 0 ; i<flist.length;i++){ try { // hiier Deklarieren wir die File 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 ochgeladen ftp.putFile(ftp.getWorkingDirectory() + "/" + f.getName(), is); // Console giebt 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 giebt aus das Übertragung beendet Wurde Cmod.addElement("Übertragung der Files " + flist.toString() + " Beendet"); System.out.println("Übertragung der Files " + flist.toString() + " Beendet"); }
</code=java>
Das Übergerordneter Ordner Event
<code=java> // Elemente Entfernen
mod.removeAllElements(); Fmod.removeAllElements(); // FtpDirEntry Deklarieren FtpDirEntry dir; // Verzeichniss Wechseln ftp.changeToParentDirectory(); // Neues Verzeichniss in Console Ausgeben Cmod.addElement("Aktuelles Verzeichniss " + ftp.getWorkingDirectory()); // Verzeichnisse in eine FtpDirEntry List hinzufügen Iterator<FtpDirEntry> dirlist = ftp.listFiles(ftp.getWorkingDirectory()); // Jedes Verzeichniss Ausgeben while(dirlist.hasNext()){ // dir elemnt Deklarieren dir=dirlist.next(); // ist dir ein Ordner ? if(dir.getType()==FtpDirEntry.Type.DIR){ // wenn ja dan in List 1 mod.addElement(dir.getName()); } // Ist dir eine Datei ? if(dir.getType()==FtpDirEntry.Type.FILE){ // wenn ja dan 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); }
</code=java>
Das Datei Löschen Event
<code=java> try {
// TODO add your handling code here: // Wir Schreiben in die Console das 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); }
</code=java>
Das Verzeichniss Löschen Event
<code=java> try {
// TODO add your handling code here: // Wir Schreiben in die Console das Wir das Verzeichniss Löschen Cmod.addElement("Delete Directory " + ftp.getWorkingDirectory()); System.out.println("Delete Directory " + ftp.getWorkingDirectory()); // Wir Löschen Das Verzeichniss 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); }
</code=java>
Das Verzeichniss Erstellen Event
<code=java> // Deklarieren der Elemente
JDialog dia = new JDialog(); dia.setSize(375, 110); dia.setLayout(null); dia.setTitle("Neues Verzeichniss 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); // Action Listner auf Button Legen b.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try { // Console Giebt aus das wir ein Verzeichniss Erstellen Cmod.addElement("Create Dir " + ftp.getWorkingDirectory() + "/" + textfield.getText()); System.out.println("Create Dir " + ftp.getWorkingDirectory() + "/" + textfield.getText()); // Wir Erstellen das Verzeichniss ftp.makeDirectory(ftp.getWorkingDirectory() + "/" + textfield.getText()); // Wir Geben die System Nachricht 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); } } });
</code=java>
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