SWT(JFace) FTP客户端实现

Posted winifredfs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SWT(JFace) FTP客户端实现相关的知识,希望对你有一定的参考价值。

Jar包一览: 

org.eclipse.jface_3.4.2.M20090107-0800.jar 
org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar 
org.eclipse.core.commands_3.4.0.I20080509-2000.jar 
org.eclipse.core.runtime_3.4.0.v20080512.jar 
org.eclipse.equinox.common_3.4.0.v20080421-2006.jar 
org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar 
commons-net-ftp-2.0.jar 

演示代码如下: 

FTPWindow.java 

复制代码代码如下:

package swt_jface.demo13; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import org.apache.commons.net.ProtocolCommandEvent; 
import org.apache.commons.net.ProtocolCommandListener; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 
import org.apache.commons.net.ftp.FTPReply; 
import org.eclipse.jface.action.Action; 
import org.eclipse.jface.action.ActionContributionItem; 
import org.eclipse.jface.action.MenuManager; 
import org.eclipse.jface.action.Separator; 
import org.eclipse.jface.action.ToolBarManager; 
import org.eclipse.jface.dialogs.Dialog; 
import org.eclipse.jface.dialogs.MessageDialog; 
import org.eclipse.jface.resource.ImageDescriptor; 
import org.eclipse.jface.viewers.IStructuredSelection; 
import org.eclipse.jface.viewers.TableViewer; 
import org.eclipse.jface.window.ApplicationWindow; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.SashForm; 
import org.eclipse.swt.custom.StyleRange; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.dnd.DND; 
import org.eclipse.swt.dnd.DragSource; 
import org.eclipse.swt.dnd.DragSourceEvent; 
import org.eclipse.swt.dnd.DragSourceListener; 
import org.eclipse.swt.dnd.DropTarget; 
import org.eclipse.swt.dnd.DropTargetEvent; 
import org.eclipse.swt.dnd.DropTargetListener; 
import org.eclipse.swt.dnd.TextTransfer; 
import org.eclipse.swt.dnd.Transfer; 
import org.eclipse.swt.events.DisposeEvent; 
import org.eclipse.swt.events.DisposeListener; 
import org.eclipse.swt.graphics.Color; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Control; 
import org.eclipse.swt.widgets.DirectoryDialog; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.Group; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Listener; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Table; 
import org.eclipse.swt.widgets.TableColumn; 
public class FTPWindow extends ApplicationWindow { 

    TableViewer localDirBrowser; 
    TableViewer remoteDirBrowser; 
    Label labelPathLocal; 
    Label labelPathRemote; 
    StyledText textLog; 
    ConnectionDialog connectionDialog; 
    Action actionUpLocalDir; 
    Action actionUpRemoteDir; 
    Action actionBrowseLocalDir; 
    Action actionConnect; 
    Action actionDisconnect; 
    Action actionDisplayAbout; 
    Action actionExit; 
    FTPClient ftp; 
    ConnectionInfo connectionInfo; 
    public FTPWindow(Shell parentShell) { 
        super(parentShell); 
        createActions(); 
        addStatusLine(); 
        //addCoolBar(SWT.FLAT | SWT.RIGHT); 
        addToolBar(SWT.FLAT); 
        addMenuBar(); 
        ftp = new FTPClient(); 
        ftp.addProtocolCommandListener(new ProtocolCommandListener() { 
            public void protocolCommandSent(ProtocolCommandEvent e) { 
                logMessage("> " + e.getCommand(), false); 
            } 
            public void protocolReplyReceived(ProtocolCommandEvent e) { 
                logMessage("< " + e.getMessage(), false); 
            } 
        }); 
    } 
    private void createActions() { 
        actionUpLocalDir = new Action() { 
            public void run() { 
                if (localDirBrowser.getInput() == null) 
                    return; 
                File dir = ((File) localDirBrowser.getInput()).getParentFile(); 
                if (dir != null) { 
                    localDirBrowser.setInput(dir); 
                    labelPathLocal.setText("Path: " + dir); 
                } 
            } 
        }; 
        actionUpLocalDir.setText("Up"); 
        actionUpLocalDir.setToolTipText("Up one level - local dir"); 
        actionUpLocalDir.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/up.gif")); 
        actionBrowseLocalDir = new Action() { 
            public void run() { 
                DirectoryDialog dialog = new DirectoryDialog(getShell()); 
                String path = dialog.open(); 
                if (path == null) 
                    return; 
                File file = new File(path); 
                localDirBrowser.setInput(file); 
                labelPathLocal.setText("Path: " + file); 
            } 
        }; 
        actionBrowseLocalDir.setText("Browse..."); 
        actionBrowseLocalDir.setToolTipText("Browse local directory"); 
        actionBrowseLocalDir.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/browse.gif")); 
        actionConnect = new Action() { 
            public void run() { 
                if (connectionDialog == null) 
                    connectionDialog = new ConnectionDialog(FTPWindow.this); 
                if (connectionDialog.open() == Dialog.OK) { 
                    connectionInfo = connectionDialog.getConnectionInfo(); 
                    if (connectionInfo == null) { 
                        logError("Failed to get connection information."); 
                    } else { 
                        logMessage("Connecting to " + connectionInfo.host, true); 
                        try { 
                            ftp.connect( 
                                connectionInfo.host, 
                                connectionInfo.port); 
                            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) 
                                throw new RuntimeException("FTP server refused connection."); 
                            logMessage("Connected to " + connectionInfo.host, true); 
                        } catch (Exception e) { 
                            logError(e.toString()); 
                            return; 
                        } 
                        try { 
                            if (ftp 
                                .login( 
                                    connectionInfo.username, 
                                    connectionInfo.password)) { 
                                logMessage("Logged in as user: "+ connectionInfo.username, true); 
                            } 
                            labelPathRemote.setText("Path: " + ftp.printWorkingDirectory()); 
                            // Lists files. 
                            FTPFile[] files = ftp.listFiles(); 
                            remoteDirBrowser.setInput(files); 
                        } catch (IOException e1) { 
                            logError(e1.getMessage()); 
                            try { 
                                ftp.disconnect(); 
                            } catch (IOException e2) { 
                                // 
                            } 
                        } 
                    } 
                } 
            } 
        }; 
        actionConnect.setText("Connect"); 
        actionConnect.setToolTipText("Connect to remote host"); 
        actionConnect.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/connect.gif")); 
        actionDisconnect = new Action() { 
            public void run() { 
                try { 
                    ftp.logout(); 
                    ftp.disconnect(); 
                }catch(Exception e) { 
                    logError(e.toString()); 
                } 
            } 
        }; 
        actionDisconnect.setText("Disconnect"); 
        actionDisconnect.setToolTipText("Disconnect from remote host"); 
        actionDisconnect.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/stop.gif")); 
        actionUpRemoteDir = new Action() { 
            public void run() { 
                try { 
                    if (ftp.changeToParentDirectory()) { 
                        labelPathRemote.setText("Path: " + ftp.printWorkingDirectory()); 
                        FTPFile[] files = ftp.listFiles(); 
                        remoteDirBrowser.setInput(files); 
                    } 
                } catch (Exception e) { 
                    logError(e.toString()); 
                } 
            } 
        }; 
        actionUpRemoteDir.setText("Up"); 
        actionUpRemoteDir.setToolTipText("Up one level - remote dir"); 
        actionUpRemoteDir.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/up.gif")); 

        actionDisplayAbout = new Action() { 
            public void run() { 
                MessageDialog.openInformation(getShell(), "About", "FTP Client v1.0 All right reserved by Jack Li Guojie."); 
            } 
        }; 
        actionDisplayAbout.setText("About"); 
        actionDisplayAbout.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/about.gif")); 

        actionExit = new Action() { 
            public void run() { 
                if(! MessageDialog.openConfirm(getShell(), "Confirm", "Are you sure you want to exit?")) 
                    return; 
                try { 
                    ftp.disconnect(); 
                }catch(Exception e) { 
                } 
                close(); 
            } 
        }; 
        actionExit.setText("Exit"); 
        actionExit.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/close.gif")); 

    } 
    private void dragNDropSupport() { 
        int operations = DND.DROP_COPY | DND.DROP_MOVE; 
        final DragSource dragSource = new DragSource(remoteDirBrowser.getControl(), operations); 
        Transfer[] formats = new Transfer[] { TextTransfer.getInstance()}; 
        dragSource.setTransfer(formats); 
        dragSource.addDragListener(new DragSourceListener() { 
            public void dragStart(DragSourceEvent event) { 
                System.out.println("DND starts"); 
                IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser.getSelection(); 
                FTPFile file = (FTPFile) selection.getFirstElement(); 
                if (file == null || file.isDirectory()) { 
                    event.doit = false; 
                } 
            } 
            public void dragSetData(DragSourceEvent event) { 

                if (TextTransfer.getInstance().isSupportedType(event.dataType)) { 
                    IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser.getSelection(); 
                    FTPFile file = (FTPFile) selection.getFirstElement(); 
                    if (file == null || file.isDirectory()) { 
                        event.doit = false; 
                    } else { 
                        event.data = file.getName(); 
                    } 
                } 
            } 
            public void dragFinished(DragSourceEvent event) { 
            } 
        }); 
        remoteDirBrowser 
            .getControl() 
            .addDisposeListener(new DisposeListener() { 
            public void widgetDisposed(DisposeEvent e) { 
                dragSource.dispose(); 
            } 
        }); 
        final DropTarget dropTarget = new DropTarget(localDirBrowser.getControl(), operations); 
        dropTarget.setTransfer(formats); 
        dropTarget.addDropListener(new DropTargetListener() { 
            public void dragEnter(DropTargetEvent event) { 
            } 
            public void dragLeave(DropTargetEvent event) { 
            } 
            public void dragOperationChanged(DropTargetEvent event) { 
            } 
            public void dragOver(DropTargetEvent event) { 
            } 
            public void drop(DropTargetEvent event) { 
                if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) { 
                    String text = (String) event.data; 
                    File target = new File((File) localDirBrowser.getInput(), text); 
                    if (target.exists()) { 
                        if (!MessageDialog.openConfirm(getShell(), "Overwriting confirmation", "Overwrite file " + target + "?")) { 
                            return; 
                        } 
                    } 

                    try { 
                        FileOutputStream stream = new FileOutputStream(target); 
                        if(ftp.retrieveFile(text, stream)) { 
                            logMessage("File retrieved successfully.", true); 
                            localDirBrowser.refresh(); 
                        }else{ 
                            logError("Failed to retrieve file: " + text); 
                        } 
                        stream.close(); 
                    } catch (IOException e) { 
                        e.printStackTrace(); 
                    } 
                } 
            } 
            public void dropAccept(DropTargetEvent event) { 
            } 
        }); 
        localDirBrowser.getControl().addDisposeListener(new DisposeListener() { 
            public void widgetDisposed(DisposeEvent e) { 
                dropTarget.dispose(); 
            } 
        }); 
    } 
    protected MenuManager createMenuManager() { 

        MenuManager bar = new MenuManager(); 
        MenuManager menuFile = new MenuManager("&File"); 
        menuFile.add(actionConnect); 
        menuFile.add(actionDisconnect); 
        menuFile.add(new Separator()); 
        menuFile.add(actionExit); 
        MenuManager menuLocal = new MenuManager("&Local"); 
        menuLocal.add(actionBrowseLocalDir); 
        menuLocal.add(actionUpLocalDir); 
        MenuManager menuRemote = new MenuManager("&Remote"); 
        menuRemote.add(actionUpRemoteDir); 
        MenuManager menuHelp = new MenuManager("&Help"); 
        menuHelp.add(actionDisplayAbout); 
        bar.add(menuFile); 
        bar.add(menuLocal); 
        bar.add(menuRemote); 
        bar.add(menuHelp); 
        bar.updateAll(true); 
        return bar; 
    } 
    public static void addAction( 

        ToolBarManager manager, 
        Action action, 
        boolean displayText) { 
        if (!displayText) { 
            manager.add(action); 
            return; 
        } else { 
            ActionContributionItem item = new ActionContributionItem(action); 
            item.setMode(ActionContributionItem.MODE_FORCE_TEXT); 
            manager.add(item); 
        } 
    } 
    protected ToolBarManager createToolBarManager(int style) { 

        ToolBarManager manager = super.createToolBarManager(style); 
        addAction(manager, actionConnect, true); 
        addAction(manager, actionDisconnect, true); 
        manager.add(new Separator()); 
        addAction(manager, actionBrowseLocalDir, true); 
        addAction(manager, actionUpLocalDir, true); 
        manager.add(new Separator()); 
        addAction(manager, actionUpRemoteDir, true); 
        manager.add(new Separator()); 
        addAction(manager, actionDisplayAbout, true);         
        addAction(manager, actionExit, true); 
        manager.update(true);         

        return manager; 
    } 
    protected Control createContents(Composite parent) { 
        Composite composite = new Composite(parent, SWT.NULL); 
        composite.setLayout(new FillLayout()); 
        SashForm verticalForm = new SashForm(composite, SWT.VERTICAL); 
        SashForm horizontalForm = new SashForm(verticalForm, SWT.HORIZONTAL); 
        Composite compositeLocalDir = new Composite(horizontalForm, SWT.NULL); 
        GridLayout gridLayout = new GridLayout(); 
        gridLayout.horizontalSpacing = 1; 
        gridLayout.verticalSpacing = 1; 
        compositeLocalDir.setLayout(gridLayout); 
        Group compositeLocalDirTop = new Group(compositeLocalDir, SWT.NULL); 
        compositeLocalDirTop.setText("Local"); 
        GridLayout gridLayout2 = new GridLayout(3, false); 
        gridLayout2.marginHeight = 0; 
        compositeLocalDirTop.setLayout(gridLayout2); 
        compositeLocalDirTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
        labelPathLocal = new Label(compositeLocalDirTop, SWT.NULL); 
        labelPathLocal.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
        labelPathLocal.setText("Path: "); 
        Button buttonUpLocalDir = new Button(compositeLocalDirTop, SWT.PUSH); 
        buttonUpLocalDir.setText(actionUpLocalDir.getText()); 
        buttonUpLocalDir.addListener(SWT.Selection, new Listener() { 
            public void handleEvent(Event event) { 
                actionUpLocalDir.run(); 
            } 
        }); 
        Button buttonBrowseLocalDir = new Button(compositeLocalDirTop, SWT.PUSH); 
        buttonBrowseLocalDir.setText(actionBrowseLocalDir.getText()); 
        buttonBrowseLocalDir.addListener(SWT.Selection, new Listener() { 
            public void handleEvent(Event event) { 
                actionBrowseLocalDir.run(); 
            } 
        }); 
        Table table = new Table(compositeLocalDir, SWT.BORDER); 
        TableColumn tcFile = new TableColumn(table, SWT.LEFT); 
        tcFile.setText("Name"); 
        TableColumn tcSize = new TableColumn(table, SWT.NULL); 
        tcSize.setText("Size"); 
        TableColumn tcDate = new TableColumn(table, SWT.NULL); 
        tcDate.setText("Date"); 
        tcFile.setWidth(200); 
        tcSize.setWidth(100); 
        tcDate.setWidth(100); 
        table.setHeaderVisible(true); 
        table.setLayoutData(new GridData(GridData.FILL_BOTH)); 
        localDirBrowser = new LocalDirectoryBrowser(table); 
        table.addListener(SWT.MouseDoubleClick, new Listener() { 
            public void handleEvent(Event event) { 
                IStructuredSelection selection = (IStructuredSelection) localDirBrowser.getSelection(); 
                File file = (File) selection.getFirstElement(); 
                if (file != null && file.isDirectory()) { 
                    localDirBrowser.setInput(file); 
                    labelPathLocal.setText("Path: " + file); 
                } 
            } 
        }); 
        Composite compositeRemoteDir = new Composite(horizontalForm, SWT.NULL); 
        gridLayout = new GridLayout(); 
        gridLayout.horizontalSpacing = 1; 
        gridLayout.verticalSpacing = 1; 
        compositeRemoteDir.setLayout(gridLayout); 
        Group compositeRemoteDirTop = new Group(compositeRemoteDir, SWT.NULL); 
        compositeRemoteDirTop.setText("Remote"); 
        gridLayout2 = new GridLayout(2, false); 
        gridLayout2.marginHeight = 0; 
        compositeRemoteDirTop.setLayout(gridLayout2); 
        compositeRemoteDirTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
        labelPathRemote = new Label(compositeRemoteDirTop, SWT.NULL); 
        labelPathRemote.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
        labelPathRemote.setText("Path: "); 
        Button buttonUpRemoteDir = new Button(compositeRemoteDirTop, SWT.PUSH); 
        buttonUpRemoteDir.setText(actionUpLocalDir.getText()); 
        buttonUpRemoteDir.addListener(SWT.Selection, new Listener() { 
            public void handleEvent(Event event) { 
                actionUpRemoteDir.run(); 
            } 
        }); 
        Table tableRemote = new Table(compositeRemoteDir, SWT.BORDER); 
        TableColumn tcFileRemote = new TableColumn(tableRemote, SWT.LEFT); 
        tcFileRemote.setText("Name"); 
        TableColumn tcSizeRemote = new TableColumn(tableRemote, SWT.NULL); 
        tcSizeRemote.setText("Size"); 
        TableColumn tcDateRemote = new TableColumn(tableRemote, SWT.NULL); 
        tcDateRemote.setText("Date"); 
        tcFileRemote.setWidth(200); 
        tcSizeRemote.setWidth(100); 
        tcDateRemote.setWidth(100); 
        tableRemote.setHeaderVisible(true); 
        tableRemote.setLayoutData(new GridData(GridData.FILL_BOTH)); 
        remoteDirBrowser = new RemoteDirectoryBrowser(tableRemote); 
        tableRemote.addListener(SWT.MouseDoubleClick, new Listener() { 
            public void handleEvent(Event event) { 
                IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser.getSelection(); 
                FTPFile file = (FTPFile) selection.getFirstElement(); 
                if (file != null && file.isDirectory()) { 
                    try { 
                        ftp.changeWorkingDirectory(file.getName()); 
                        labelPathRemote.setText("Path: " + ftp.printWorkingDirectory()); 
                        remoteDirBrowser.setInput(ftp.listFiles()); 
                    } catch (IOException e) { 
                        logError(e.toString()); 
                    } 
                } 
            } 
        }); 
        textLog = 
            new StyledText( 
                verticalForm, 
                SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
        localDirBrowser.setInput(File.listRoots()[0]); 
        labelPathLocal.setText("Path: " + File.listRoots()[0]); 
        verticalForm.setWeights(new int[]{4, 1}); 
        dragNDropSupport(); 
        getToolBarControl().setBackground(new Color(getShell().getDisplay(), 230, 230, 230)); 
        getShell().setImage(new Image(getShell().getDisplay(), "C:/icons/ftp/ftp.gif")); 
        getShell().setText("FTP Client v1.0"); 

        return composite; 
    } 
    private void logMessage(String message, boolean showInStatusBar) { 
        StyleRange styleRange1 = new StyleRange(); 
        styleRange1.start = textLog.getCharCount(); 
        styleRange1.length = message.length(); 
        styleRange1.foreground = getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN); 
        styleRange1.fontStyle = SWT.NORMAL; 
        textLog.append(message + " "); 
        textLog.setStyleRange(styleRange1); 
        textLog.setSelection(textLog.getCharCount()); 
        if(showInStatusBar) { 
            setStatus(message); 
        } 
    } 
    private void logError(String message) { 
        StyleRange styleRange1 = new StyleRange(); 
        styleRange1.start = textLog.getCharCount(); 
        styleRange1.length = message.length(); 
        styleRange1.foreground = getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_RED); 
        styleRange1.fontStyle = SWT.NORMAL;         
        textLog.append(message + " "); 
        textLog.setStyleRange(styleRange1); 
        textLog.setSelection(textLog.getCharCount()); 
    } 
    public static void main(String[] args) { 
        ApplicationWindow window = new FTPWindow(null); 
        window.setBlockOnOpen(true); 
        window.open(); 
        Display.getCurrent().dispose(); 
    } 
}


ConnectionDialog.java

复制代码代码如下:

package swt_jface.demo13; 
import java.io.File; 
import org.eclipse.jface.dialogs.Dialog; 
import org.eclipse.jface.dialogs.DialogSettings; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Control; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Text; 
class ConnectionInfo { 
    public String host; 
    public int port; 
    public String password; 
    public String username; 


public class ConnectionDialog extends Dialog { 

    private static final String DIALOG_SETTING_FILE = "ftp.connection.xml"; 
    private static final String KEY_HOST = "HOST"; 
    private static final String KEY_PORT = "PORT"; 
    private static final String KEY_USERNAME = "USER"; 
    private static final String KEY_PASSWORD = "PASSWORD"; 

    Text textHost; 
    Text textPort; 
    Text textUsername; 
    Text textPassword; 

    DialogSettings dialogSettings; 
    ConnectionInfo connectionInfo; 

    ConnectionDialog(FTPWindow window) { 

        super(window.getShell()); 
        connectionInfo = null; 

        dialogSettings = new DialogSettings("FTP"); 
        try { 
            dialogSettings.load(DIALOG_SETTING_FILE); 
        }catch(Exception e) { 
            e.printStackTrace(); 
        } 
    } 
    protected Control createDialogArea(Composite parent) { 
        getShell().setText("Connection Settings"); 

        Composite composite = (Composite)super.createDialogArea(parent); 
        composite.setLayout(new GridLayout(2, false)); 

        new Label(composite, SWT.NULL).setText("Host: "); 
        textHost = new Text(composite, SWT.BORDER); 
        textHost.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 

        new Label(composite, SWT.NULL).setText("Port: "); 
        textPort = new Text(composite, SWT.BORDER); 
        textPort.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 

        new Label(composite, SWT.NULL).setText("Username: "); 
        textUsername = new Text(composite, SWT.BORDER); 
        textUsername.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 

        new Label(composite, SWT.NULL).setText("Password: "); 
        textPassword = new Text(composite, SWT.PASSWORD | SWT.BORDER); 
        textPassword.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
        try { 
            textHost.setText(dialogSettings.get(KEY_HOST)); 
            textPort.setText(dialogSettings.getInt(KEY_PORT) + ""); 
            textUsername.setText(dialogSettings.get(KEY_USERNAME)); 
            textPassword.setText(dialogSettings.get(KEY_PASSWORD)); 
        }catch(Exception e) { 
        } 
        return composite; 
    } 
    public ConnectionInfo getConnectionInfo() { 
        return connectionInfo; 
    } 
    protected void okPressed() { 
        try { 
            if(! new File(DIALOG_SETTING_FILE).exists()) { 
                new File(DIALOG_SETTING_FILE).createNewFile(); 
            } 
            dialogSettings.put(KEY_HOST, textHost.getText()); 
            dialogSettings.put(KEY_PORT, Integer.parseInt(textPort.getText().trim())); 
            dialogSettings.put(KEY_USERNAME, textUsername.getText()); 
            dialogSettings.put(KEY_PASSWORD, textPassword.getText()); 
            dialogSettings.save(DIALOG_SETTING_FILE); 
        }catch(Exception e) { 
            e.printStackTrace(); 
        } 
        connectionInfo = new ConnectionInfo(); 
        connectionInfo.host = textHost.getText(); 
        connectionInfo.port = Integer.parseInt(textPort.getText().trim()); 
        connectionInfo.username = textUsername.getText(); 
        connectionInfo.password = textPassword.getText(); 
        super.okPressed(); 
    } 
}


FileIconUtil.java

复制代码代码如下:

package swt_jface.demo13; 
import java.io.File; 
import org.apache.commons.net.ftp.FTPFile; 
import org.eclipse.jface.resource.ImageRegistry; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.graphics.ImageData; 
import org.eclipse.swt.program.Program; 
import org.eclipse.swt.widgets.Display; 
public class FileIconUtil { 

    static ImageRegistry imageRegistry; 

    static Image iconFolder; 
    static Image iconFile; 

    static { 
        iconFolder = new Image(Display.getCurrent(), "C:/icons/folder.gif"); 
        iconFile = new Image(Display.getCurrent(), "C:/icons/file.gif"); 
    } 
    public static Image getIcon(File file) { 
        if (file.isDirectory()) return iconFolder; 
        int lastDotPos = file.getName().indexOf(‘.‘); 
        if (lastDotPos == -1) return iconFile; 
        Image image = getIcon(file.getName().substring(lastDotPos + 1)); 
        return image == null ? iconFile : image; 
    } 
    public static Image getIcon(FTPFile file) { 
        if (file.isDirectory()) return iconFolder; 
        int lastDotPos = file.getName().indexOf(‘.‘); 
        if (lastDotPos == -1) return iconFile; 
        Image image = getIcon(file.getName().substring(lastDotPos + 1)); 
        return image == null ? iconFile : image; 
    }     
    private static Image getIcon(String extension) { 
        if (imageRegistry == null) imageRegistry = new ImageRegistry(); 
        Image image = imageRegistry.get(extension); 
        if (image != null) return image; 
        Program program = Program.findProgram(extension); 
        ImageData imageData = (program == null ? null : program.getImageData()); 
        if (imageData != null) { 
            image = new Image(Display.getCurrent(), imageData); 
            imageRegistry.put(extension, image); 
        } else { 
            image = iconFile; 
        } 
        return image; 
    }     
}


LocalDirectoryBrowser.java 

复制代码代码如下:

package swt_jface.demo13; 
import java.io.File; 
import java.util.Date; 
import org.eclipse.jface.viewers.ILabelProviderListener; 
import org.eclipse.jface.viewers.IStructuredContentProvider; 
import org.eclipse.jface.viewers.ITableLabelProvider; 
import org.eclipse.jface.viewers.TableViewer; 
import org.eclipse.jface.viewers.Viewer; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.widgets.Table; 
public class LocalDirectoryBrowser extends TableViewer { 
public LocalDirectoryBrowser(Table table) { 
super(table); 
init(); 


private void init() { 
setContentProvider(new IStructuredContentProvider() { 
public Object[] getElements(Object inputElement) { 
File dir = (File)inputElement; 
return dir.listFiles(); 

public void dispose() { 

public void inputChanged( 
Viewer viewer, 
Object oldInput, 
Object newInput) { 

}); 

setLabelProvider(new ITableLabelProvider() { 
public Image getColumnImage(Object element, int columnIndex) { 
if(columnIndex == 0) 
return FileIconUtil.getIcon((File)element); 
return null; 

public String getColumnText(Object element, int columnIndex) { 
switch(columnIndex) { 
case 0: 
return ((File)element).getName(); 
case 1: 
return ((File)element).length() + ""; 
case 2: 
return new Date(((File)element).lastModified()).toString(); 
default: 
return ""; 


public void addListener(ILabelProviderListener listener) { 

public void dispose() { 

public boolean isLabelProperty(Object element, String property) { 
return false; 

public void removeListener(ILabelProviderListener listener) { 

}); 


package swt_jface.demo13; 
import java.io.File; 
import java.util.Date; 
import org.eclipse.jface.viewers.ILabelProviderListener; 
import org.eclipse.jface.viewers.IStructuredContentProvider; 
import org.eclipse.jface.viewers.ITableLabelProvider; 
import org.eclipse.jface.viewers.TableViewer; 
import org.eclipse.jface.viewers.Viewer; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.widgets.Table; 
public class LocalDirectoryBrowser extends TableViewer { 
    public LocalDirectoryBrowser(Table table) { 
        super(table); 
        init(); 
    } 

    private void init() { 
        setContentProvider(new IStructuredContentProvider() { 
            public Object[] getElements(Object inputElement) { 
                File dir = (File)inputElement; 
                return dir.listFiles(); 
            } 
            public void dispose() { 
            } 
            public void inputChanged( 
                Viewer viewer, 
                Object oldInput, 
                Object newInput) { 
            } 
        }); 

        setLabelProvider(new ITableLabelProvider() { 
            public Image getColumnImage(Object element, int columnIndex) { 
                if(columnIndex == 0) 
                    return FileIconUtil.getIcon((File)element); 
                return null; 
            } 
            public String getColumnText(Object element, int columnIndex) { 
                switch(columnIndex) { 
                    case 0: 
                        return ((File)element).getName(); 
                    case 1: 
                        return ((File)element).length() + ""; 
                    case 2: 
                        return new Date(((File)element).lastModified()).toString(); 
                    default: 
                        return "";         
                } 
            } 
            public void addListener(ILabelProviderListener listener) { 
            } 
            public void dispose() { 
            } 
            public boolean isLabelProperty(Object element, String property) { 
                return false; 
            } 
            public void removeListener(ILabelProviderListener listener) { 
            } 
        }); 
    } 



RemoteDirectoryBrowser.java 

复制代码代码如下:

package swt_jface.demo13; 
import java.util.Calendar; 
import org.apache.commons.net.ftp.FTPFile; 
import org.eclipse.jface.viewers.ILabelProviderListener; 
import org.eclipse.jface.viewers.IStructuredContentProvider; 
import org.eclipse.jface.viewers.ITableLabelProvider; 
import org.eclipse.jface.viewers.TableViewer; 
import org.eclipse.jface.viewers.Viewer; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.widgets.Table; 
public class RemoteDirectoryBrowser extends TableViewer { 
public RemoteDirectoryBrowser(Table table) { 
super(table); 
init(); 


private void init() { 
setContentProvider(new IStructuredContentProvider() { 
public Object[] getElements(Object inputElement) { 
FTPFile[] files = (FTPFile[])inputElement; 
return files; 

public void dispose() { 

public void inputChanged( 
Viewer viewer, 
Object oldInput, 
Object newInput) { 

}); 

setLabelProvider(new ITableLabelProvider() { 
public Image getColumnImage(Object element, int columnIndex) { 
if(columnIndex == 0) 
return FileIconUtil.getIcon((FTPFile)element); 
return null; 

public String getColumnText(Object element, int columnIndex) { 
switch(columnIndex) { 
case 0: 
return ((FTPFile)element).getName(); 
case 1: 
return ((FTPFile)element).getSize() + ""; 
case 2: 
Calendar cal = ((FTPFile)element).getTimestamp(); 
return cal.get(Calendar.YEAR) + "-" + 
cal.get(Calendar.MONTH) + "-" + 
cal.get(Calendar.DAY_OF_MONTH) + " " + 
cal.get(Calendar.HOUR_OF_DAY) + ":" + 
cal.get(Calendar.MINUTE) + ":" + 
cal.get(Calendar.SECOND); 
default: 
return ""; 


public void addListener(ILabelProviderListener listener) { 

public void dispose() { 

public boolean isLabelProperty(Object element, String property) { 
return false; 

public void removeListener(ILabelProviderListener listener) { 

}); 


 
 
     
技术分享图片 JAVA8高级新特性课程+Java Util Concurrency+Java NIO视频教程 尚硅谷JAVA视频教程
技术分享图片 Netty实战高性能分布式RPC视频教程 19集Netty高阶实战视频教程
技术分享图片 Spring Cloud学习视频教程
技术分享图片 2017高级互联网架构师全套视频教程 30G
技术分享图片 2017最新版千峰Java从入门到精通 Java核心技术 视频教程 30G
技术分享图片 龙果学院Elasticsearch顶尖高手系列-高手进阶篇 视频教程
技术分享图片 Java开发大型互联网微服务架构简述之sprng boot入门
技术分享图片 源码时代全套JavaSE入门视频教程 2017最新JAVA基础入门与进阶全套视频 技术分享图片
技术分享图片 2017最新Spring+SpringMVC+MyBatis+Freemarker+Jquery+Redis实战大型企业级电商项目
技术分享图片 2017 理解IOC,AOP核心思想的精髓,掌握Spring事务管理Spring4深入浅出开发视频教程
技术分享图片 孙宇老师Struts2+Hibernate4+Maven+EasyUI+SpringMvc+Spring+Mybatis+Maven整合课程 技术分享图片
技术分享图片 全程手把手带你运用Java Shiro技术栈基于最流行RBAC拓展模型实战分组织机构管理系统  ...2
技术分享图片 一头扎进Java Shiro高级工程师实战课程(SSO单点登录+Shiro开发框架)
技术分享图片 Java安全框架Shiro企业级权限解决方案入门+实战简单权限管理系统项目案例视频课程
技术分享图片 Maven+Struts+Spring+Hibernate入门+s2sh整合及综合案例
技术分享图片 数据库库表分离设计-基于Mycat中间件分布式数据库架构及企业实践 Mycat入门到精通
技术分享图片 基于Hibernate+Struts+Spring+JUnit+SpringMVC+WebService全注解实战开发大型商业ERP
技术分享图片 基于SAO高性能、高并发、高可用架构实战SpringMVC+Spring+MyBatis整合大型电商开发 ...2
技术分享图片 大数据消息系统视频课程ApacheKafka实战(分布式消息中间件kafka与flume整合集成)
技术分享图片 JAVA报表开发JasperReport详解入门视频课程+资料
























































































































































































































































































































































































































































































































































































































































































































































































































































































以上是关于SWT(JFace) FTP客户端实现的主要内容,如果未能解决你的问题,请参考以下文章

JFace和SWT有啥区别

SWT/JFace 中CheckBoxTreeViewer 子节点部分选中,父节点为半选状态,改用tree+checkox的方式如何实现?

ftp客户端工具,ftp客户端工具实现的方法及连接管理方法

swt,jface,rcp

SWT(JFace) Wizard(Eclipse插件编程必备)

eclipse插件开发学习笔记