大家好,我想问一下,如何用java实现对一个文件夹里面的文件进行列举,比如文件夹1里面有一些文件和文件夹2,文件夹2里面也有文件。
如何一下子找出文件1里面包含的所有文件,最后连路经也列举出来。小弟在线等,谢谢

解决方案 »

  1.   

    用isDirectory()方法判断是否为目录,用getAbsolutePath()方法或者getCanonicalPath()方法返回路径名...
      

  2.   

    import java.io.File; 
    import java.io.IOException; 
    public class TestReadSubDirectory { 
      public static void main(String[] args) throws IOException { 
        TestReadSubDirectory p = new TestReadSubDirectory(); 
        p.read("\\user\\123\\1"); 
      } 
      public void read(String filepath) throws IOException { 
        File f = new File(filepath);// 定义文件路径 
        if (f.exists() && f.isDirectory()) {// 判断是文件还是目录 
          if (f.listFiles().length == 0) {// 若目录下没有文件则直接操作 
            // f.delete(); 对空目录的操作 
          } else {// 若有则把文件放进数组,并判断是否有下级目录 
            File file[] = f.listFiles(); 
            int i = f.listFiles().length; 
            for (int j = 0; j < i; j++) { 
              if (file[j].isDirectory()) { 
                // 对当前目录的操作 
                read(file[j].getAbsolutePath());// 递归调用del方法并取得子目录路径 
              } 
              // 对文件的操作/ 
            } 
          } 
          read(filepath);// 递归调用 
        } 
      } 
      

  3.   

    这是以前学习eclipse UI的时候自己写的一个文件对话框(这显示指定图形格式文件),你可以参考一下。import java.io.File;
    import java.io.FileFilter;
    import java.util.ArrayList;
    import java.util.List;import org.eclipse.jface.dialogs.IDialogConstants;
    import org.eclipse.jface.dialogs.TitleAreaDialog;
    import org.eclipse.jface.viewers.ISelectionChangedListener;
    import org.eclipse.jface.viewers.IStructuredContentProvider;
    import org.eclipse.jface.viewers.ITreeContentProvider;
    import org.eclipse.jface.viewers.LabelProvider;
    import org.eclipse.jface.viewers.SelectionChangedEvent;
    import org.eclipse.jface.viewers.TreeSelection;
    import org.eclipse.jface.viewers.TreeViewer;
    import org.eclipse.jface.viewers.Viewer;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.ModifyEvent;
    import org.eclipse.swt.events.ModifyListener;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.events.SelectionListener;
    import org.eclipse.swt.graphics.Image;
    import org.eclipse.swt.graphics.Point;
    import org.eclipse.swt.layout.FormAttachment;
    import org.eclipse.swt.layout.FormData;
    import org.eclipse.swt.layout.FormLayout;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.widgets.Combo;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Control;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Tree;
    import org.eclipse.ui.plugin.AbstractUIPlugin;public class MyFileDialog extends TitleAreaDialog {
    private Image folder = AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/folder.png").createImage();
    private Image imgfile = AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/imgfile.png").createImage();
    private FileFilter filter = new AllImageFileFilter(); class TreeLabelProvider extends LabelProvider {
    public String getText(Object element) {
    String text = "";
    File file = (File)element;
    if(file.isDirectory()){
    text = file.getPath();
    if(text.substring(text.lastIndexOf(file.separator)).length() > 1){
    text = text.substring(text.lastIndexOf(file.separator)+1);
    }
    }else{
    text = file.getName();
    }
    return text;
    }
    public Image getImage(Object element) {
    File file = (File)element;
    return file.isDirectory()?folder:imgfile;
    }
    }
    class TreeContentProvider implements IStructuredContentProvider, ITreeContentProvider {
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
    public void dispose() {
    }
    public Object[] getElements(Object inputElement) {
    File[] roots = File.listRoots();
    List<File> l = new ArrayList<File>();
    for(File root:roots){
    if(root.listFiles(filter) != null){
    l.add(root);
    }
    }
    return l.toArray();
    }
    public Object[] getChildren(Object parentElement) {
    File file = (File)parentElement;
    return file.listFiles(filter);
    }
    public Object getParent(Object element) {
    File file = (File)element;
    return file.getParentFile();
    }
    public boolean hasChildren(Object element) {
    File file = (File)element;
    return file.listFiles(filter)!=null;
    }
    }
    private Tree tree;
    private Combo filefilter;
    private TreeViewer filetree;
    private File returnfile;
    /**
     * Create the dialog
     * @param parentShell
     */
    public MyFileDialog(Shell parentShell) {
    super(parentShell);
    } /**
     * Create contents of the dialog
     * @param parent
     */
    @Override
    protected Control createDialogArea(Composite parent) {
    Composite area = (Composite) super.createDialogArea(parent);
    Composite container = new Composite(area, SWT.NONE);
    container.setLayout(new FormLayout());
    container.setLayoutData(new GridData(GridData.FILL_BOTH)); filefilter = new Combo(container, SWT.NONE);
    final FormData fd_filefilter = new FormData();
    fd_filefilter.bottom = new FormAttachment(100, -24);
    fd_filefilter.right = new FormAttachment(100, -5);
    fd_filefilter.left = new FormAttachment(0, 5);
    filefilter.setLayoutData(fd_filefilter);
    filefilter.add("ALL Image Files");
    filefilter.add("*.png");
    filefilter.add("*.jpg");
    filefilter.add("*.bmp");
    filefilter.select(0); filetree = new TreeViewer(container, SWT.BORDER);
    filetree.setLabelProvider(new TreeLabelProvider());
    filetree.setContentProvider(new TreeContentProvider());
    tree = filetree.getTree();
    fd_filefilter.top = new FormAttachment(tree, 5, SWT.DEFAULT);
    final FormData fd_tree = new FormData();
    fd_tree.top = new FormAttachment(0, 5);
    fd_tree.left = new FormAttachment(0, 5);
    fd_tree.right = new FormAttachment(100, -5);
    fd_tree.bottom = new FormAttachment(100, -49);
    tree.setLayoutData(fd_tree);
    filetree.setInput("root");
    filetree.addSelectionChangedListener(new ISelectionChangedListener(){ public void selectionChanged(SelectionChangedEvent event) {
    TreeSelection ts = (TreeSelection) filetree.getSelection();
    File file = (File) ts.getFirstElement();
    if(file.isDirectory()){
    return;
    }else{
    returnfile = file;
    System.out.println(returnfile);
    }

    }});

    filefilter.addSelectionListener(new SelectionListener(){ public void widgetDefaultSelected(SelectionEvent e) {
    // TODO Auto-generated method stub

    } public void widgetSelected(SelectionEvent e) {
    int index = filefilter.getSelectionIndex();
    switch (index) {
    case 0:
    filter = new AllImageFileFilter();
    break;
    case 1:
    filter = new ImageFileFilter(".png");
    break;
    case 2:
    filter = new ImageFileFilter(".jpg");
    break;
    case 3:
    filter = new ImageFileFilter(".bmp");
    break; default:
    break;
    }
    filetree.refresh();
    }});
    setMessage("选择个性图标,这个图标将显示在您的个人信息中。");
    //
    return area;
    } /**
     * Create contents of the button bar
     * @param parent
     */
    @Override
    protected void createButtonsForButtonBar(Composite parent) {
    createButton(parent, IDialogConstants.OK_ID, "确定",
    false);
    createButton(parent, IDialogConstants.CANCEL_ID,
    "取消", false);
    } /**
     * Return the initial size of the dialog
     */
    @Override
    protected Point getInitialSize() {
    return new Point(500, 443);
    }
    protected void configureShell(Shell newShell) {
    super.configureShell(newShell);
    newShell.setText("选择个性图标");
    }


    @Override
    protected void okPressed() {
    if(returnfile == null)
    return;
    super.okPressed();
    }
    private class AllImageFileFilter implements FileFilter{ public boolean accept(File file) {
    String filename = file.getName().toLowerCase();
    return filename.endsWith(".jpg")||filename.endsWith(".bmp")||filename.endsWith(".png")||file.isDirectory();
    }

    }
    private class ImageFileFilter implements FileFilter{
    String fileType;

    public ImageFileFilter(String fileType) {
    this.fileType = fileType;
    } public boolean accept(File file) {
    String filename = file.getName().toLowerCase();
    return filename.endsWith(fileType)||file.isDirectory();
    }

    }
    public File getSelect() {
    return returnfile;
    }
    }