Java Code:
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

import org.eclipse.jface.resource.ImageDescriptor;import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TableColumn;

public class JFaceExplorer extends ApplicationWindow {
  public JFaceExplorer() {
    super(null);
    addStatusLine();
  }

  protected Control createContents(Composite parent) {
    getShell().setText("JFace File Explorer");
    SashForm sash_form = new SashForm(parent, SWT.HORIZONTAL | SWT.NULL);

    TreeViewer tv = new TreeViewer(sash_form);
    tv.setContentProvider(new FileTreeContentProvider());
    tv.setLabelProvider(new FileTreeLabelProvider());
    tv.setInput(new File("C:\\"));
    tv.addFilter(new AllowOnlyFoldersFilter());

    final TableViewer tbv = new TableViewer(sash_form, SWT.BORDER
        | SWT.FULL_SELECTION | SWT.MULTI);
    tbv.setContentProvider(new FileTableContentProvider());
    tbv.setLabelProvider(new FileTableLabelProvider());
    tbv.setSorter(new FileSorter());

    TableColumn column = new TableColumn(tbv.getTable(), SWT.LEFT);
    column.setText("Name");
    column.setWidth(200);

    column = new TableColumn(tbv.getTable(), SWT.RIGHT);
    column.setText("Size");
    column.setWidth(100);

    tbv.getTable().setHeaderVisible(true);

    tv.addSelectionChangedListener(new ISelectionChangedListener() {
      public void selectionChanged(SelectionChangedEvent event) {
        IStructuredSelection selection = (IStructuredSelection) event
            .getSelection();

        Object selected_file = selection.getFirstElement();
        tbv.setInput(selected_file);
      }
    });

    tbv.addSelectionChangedListener(new ISelectionChangedListener() {
      public void selectionChanged(SelectionChangedEvent event) {
        IStructuredSelection selection = (IStructuredSelection) event
            .getSelection();

        setStatus("Number of items selected is " + selection.size());
      }
    });

    return sash_form;
  }

  public static void main(String[] args) {
    JFaceExplorer w = new JFaceExplorer();
    w.setBlockOnOpen(true);
    w.open();
    Display.getCurrent().dispose();
  }
}

class Util {
  private static ImageRegistry image_registry;

  public static URL newURL(String url_name) {
    try {
      return new URL(url_name);
    } catch (MalformedURLException e) {
      throw new RuntimeException("Malformed URL " + url_name, e);
    }
  }

  public static ImageRegistry getImageRegistry() {
    if (image_registry == null) {
      image_registry = new ImageRegistry();
      image_registry.put("folder", ImageDescriptor
          .createFromURL(newURL("file:icons/folder.gif")));
      image_registry.put("file", ImageDescriptor
          .createFromURL(newURL("file:icons/file.gif")));
    }
    return image_registry;
  }
}

class FileTreeLabelProvider extends LabelProvider {
  public String getText(Object element) {
    return ((File) element).getName();
  }

  public Image getImage(Object element) {
    if (((File) element).isDirectory()) {
      return Util.getImageRegistry().get("folder");
    } else {
      return Util.getImageRegistry().get("file");
    }
  }
}

class FileTreeContentProvider implements ITreeContentProvider {
  public Object[] getChildren(Object element) {
    Object[] kids = ((File) element).listFiles();
    return kids == null ? new Object[0] : kids;
  }

  public Object[] getElements(Object element) {
    return getChildren(element);
  }

  public boolean hasChildren(Object element) {
    return getChildren(element).length > 0;
  }

  public Object getParent(Object element) {
    return ((File) element).getParent();
  }

  public void dispose() {
  }

  public void inputChanged(Viewer viewer, Object old_input, Object new_input) {
  }
}

class FileTableLabelProvider implements ITableLabelProvider {
  public String getColumnText(Object element, int column_index) {
    if (column_index == 0) {
      return ((File) element).getName();
    }

    if (column_index == 1) {
      return "" + ((File) element).length();
    }

    return "";
  }

  public void addListener(ILabelProviderListener ilabelproviderlistener) {
  }

  public void dispose() {
  }

  public boolean isLabelProperty(Object obj, String s) {
    return false;
  }

  public void removeListener(ILabelProviderListener ilabelproviderlistener) {
  }

  public Image getColumnImage(Object element, int column_index) {

    if (column_index != 0) {
      return null;
    }

    if (((File) element).isDirectory()) {
      return Util.getImageRegistry().get("folder");
    } else {
      return Util.getImageRegistry().get("file");
    }
  }
}

class FileTableContentProvider implements IStructuredContentProvider {
  public Object[] getElements(Object element) {
    Object[] kids = null;
    kids = ((File) element).listFiles();
    return kids == null ? new Object[0] : kids;
  }

  public void dispose() {
  }

  public void inputChanged(Viewer viewer, Object old_object, Object new_object) {
  }
}

class FileSorter extends ViewerSorter {
  public int category(Object element) {
    return ((File) element).isDirectory() ? 0 : 1;
  }
}

class AllowOnlyFoldersFilter extends ViewerFilter {
  public boolean select(Viewer viewer, Object parent, Object element) {
    return ((File) element).isDirectory();
  }
}