我想用Java做一个文件夹对话框,弹出该对话框后只能显示所选目录下的文件夹,选中某个文件夹,可以自动获取这个文件夹下所有文件(.txt)进行其他处理。请问应该怎么做?用什么类?

解决方案 »

  1.   

    JFileChooser
    在jdk帮助中的例子如下:
    JFileChooser chooser = new JFileChooser();
        // Note: source for ExampleFileFilter can be found in FileChooserDemo,
        // under the demo/jfc directory in the Java 2 SDK, Standard Edition.
        ExampleFileFilter filter = new ExampleFileFilter();
        filter.addExtension("jpg");
        filter.addExtension("gif");
        filter.setDescription("JPG & GIF Images");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(parent);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
           System.out.println("You chose to open this file: " +
                chooser.getSelectedFile().getName());
        }
      

  2.   

    你可以把这几句
        filter.addExtension("jpg");
        filter.addExtension("gif");
        filter.setDescription("JPG & GIF Images");
    改成你说的
    filter.addExtension("txt");
    这样就能达到你的目的了
      

  3.   

    我查了API,javax.swing.filechooser.FileFilter里面没有addExtension和setDescription这两个方法啊。
      

  4.   

    给楼主一个程序和你的要求一样。
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import java.beans.*;
    import java.util.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.filechooser.FileFilter;
    import javax.swing.filechooser.FileView;public class FileChooserTest
    {
       public static void main(String[] args)
       {
          ImageViewerFrame frame = new ImageViewerFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
       }
    }/**
       A frame that has a menu for loading an image and a display
       area for the loaded image.
    */
    class ImageViewerFrame extends JFrame
    {
       public ImageViewerFrame()
       {
          setTitle("FileChooserTest");
          setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);      // set up menu bar
          JMenuBar menuBar = new JMenuBar();
          setJMenuBar(menuBar);      JMenu menu = new JMenu("File");
          menuBar.add(menu);      JMenuItem openItem = new JMenuItem("Open");
          menu.add(openItem);
          openItem.addActionListener(new FileOpenListener());      JMenuItem exitItem = new JMenuItem("Exit");
          menu.add(exitItem);
          exitItem.addActionListener(new
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   System.exit(0);
                }
             });      // use a label to display the images
          label = new JLabel();
          label.setHorizontalAlignment(SwingConstants.CENTER);
          label.setVerticalAlignment(SwingConstants.CENTER);
          add(label);      // set up file chooser
          chooser = new JFileChooser();      // accept all image files ending with .jpg, .jpeg, .gif
          final ExtensionFileFilter filter = new ExtensionFileFilter();
          filter.addExtension("jpg");
          filter.setDescription("JPG格式图片");
          filter.addExtension("jpeg");
          filter.addExtension("gif");
          filter.setDescription("Image files");
          filter.setDescription("JPG格式图片");
          chooser.setFileFilter(filter);      chooser.setAccessory(new ImagePreviewer(chooser));
          
          chooser.setFileView(new FileIconView(filter, new ImageIcon("palette.gif")));
       }
       
       /**
          This is the listener for the File->Open menu item.
       */
       private class FileOpenListener implements ActionListener
       {
          public void actionPerformed(ActionEvent event)
          {
             chooser.setCurrentDirectory(new File("."));         // show file chooser dialog
             int result = chooser.showOpenDialog(ImageViewerFrame.this);         // if image file accepted, set it as icon of the label
             if(result == JFileChooser.APPROVE_OPTION)
             {
                String name = chooser.getSelectedFile().getPath();
                label.setIcon(new ImageIcon(name));
             }
          }
       }   public static final int DEFAULT_WIDTH = 300;
       public static final int DEFAULT_HEIGHT = 400;     private JLabel label;
       private JFileChooser chooser;
    }/**
       This file filter matches all files with a given set of 
       extensions.
    */
    class ExtensionFileFilter extends FileFilter
    {
       /**
          Adds an extension that this file filter recognizes.
          @param extension a file extension (such as ".txt" or "txt")
       */
       public void addExtension(String extension)
       {
          if (!extension.startsWith("."))
             extension = "." + extension;
          extensions.add(extension.toLowerCase());     
       }   /**
          Sets a description for the file set that this file filter
          recognizes.
          @param aDescription a description for the file set
       */
       public void setDescription(String aDescription)
       {
          description = aDescription;
       }   /**
          Returns a description for the file set that this file
          filter recognizes.
          @return a description for the file set
       */
       public String getDescription()
       {
          return description; 
       }   public boolean accept(File f)
       {
          if (f.isDirectory()) return true;
          String name = f.getName().toLowerCase();      // check if the file name ends with any of the extensions
          for (String extension : extensions)
             if (name.endsWith(extension)) 
                return true;
          return false;
       }
       
       private String description = "";
       private ArrayList<String> extensions = new ArrayList<String>();
    }/**
       A file view that displays an icon for all files that match
       a file filter.
    */
    class FileIconView extends FileView
    {
       /** 
           Constructs a FileIconView.
           @param aFilter a file filter--all files that this filter
           accepts will be shown with the icon.
           @param anIcon--the icon shown with all accepted files.
       */
       public FileIconView(FileFilter aFilter, Icon anIcon)
       {
          filter = aFilter;
          icon = anIcon;
       }   public Icon getIcon(File f)
       {
          if (!f.isDirectory() && filter.accept(f)) 
             return icon;
          else return null;
       }
       
       private FileFilter filter;
       private Icon icon;
    }/**
       A file chooser accessory that previews images.
    */
    class ImagePreviewer extends JLabel 
    {
       /**
          Constructs an ImagePreviewer.
          @param chooser the file chooser whose property changes
          trigger an image change in this previewer
       */
       public ImagePreviewer(JFileChooser chooser) 
       {
          setPreferredSize(new Dimension(100, 100));
          setBorder(BorderFactory.createEtchedBorder());      chooser.addPropertyChangeListener(new 
             PropertyChangeListener()
             {
                public void propertyChange(PropertyChangeEvent 
                   event) 
                {
                   if (event.getPropertyName() ==
                      JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
                   {
                      // the user has selected a new file 
                      File f = (File) event.getNewValue();
                      if (f == null) { setIcon(null); return; }
                      
                      // read the image into an icon
                      ImageIcon icon = new ImageIcon(f.getPath());                  // if the icon is too large to fit, scale it
                      if(icon.getIconWidth() > getWidth())
                         icon = new ImageIcon(icon.getImage().getScaledInstance(
                            getWidth(), -1, Image.SCALE_DEFAULT));                  setIcon(icon);
                   }
        }
             });
       }
    }
      

  5.   

    addExtension和setDescription这两个方法是哪个类中的?
      

  6.   

    好像是C# 中的吧
    我的意思是在对话框中选择文件。
    比如“父文件夹-〉子文件夹1、2...”当选择到子文件夹1时,因为它目录下不再有文件夹,只有.txt文件,因此不能继续打开它的下级目录,而是提示它目录下文件名、文件个数等其他信息。
    请问用Java怎么实现?
      

  7.   

    package com.xxx;import java.io.File;
    import javax.swing.filechooser.*;/* ImageFilter.java is used by FileChooserDemo2.java. */
    public class TextFilter extends FileFilter {
    /*
         * Get the extension of a file.
         */
        public static String getExtension(File f) {
            String ext = null;
            String s = f.getName();
            int i = s.lastIndexOf('.');        if (i > 0 &&  i < s.length() - 1) {
                ext = s.substring(i+1).toLowerCase();
            }
            return ext;
        }
        
        //Accept all directories and all gif, jpg, tiff, or png files.
        public boolean accept(File f) {
            if (f.isDirectory()) {
                return true;
            }        String extension = getExtension(f);
            if (extension != null) {
                if (extension.equals("txt") ||
                    extension.equals("dat")) {
                        return true;
                } else {
                    return false;
                }
            }        return false;
        }    //The description of this filter
        public String getDescription() {
            return "Just Text Files";
        }
    }
      

  8.   

    JFileChooser fc = new JFileChooser();
    fc.setFileFilter(new TextFilter());
    int retVal = fc.showSaveDialog(this);
    if (retVal == JFileChooser.APPROVE_OPTION) {
      File file = fc.getSelectedFile();
    if (file.exists() == false
    || file.exists() == true
    && JOptionPane.showConfirmDialog(this, "是否替换现有文件?",
    "友情提示", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { // 保存文件
    try {
    String filepath = TextFilter.getExtension(file) == null ? (file
    .getPath() + ".txt")
    : file.getPath();
    //todo...
    JOptionPane.showMessageDialog(this, "文件保存到" + filepath
    + ",请查看!", "提示",
    JOptionPane.INFORMATION_MESSAGE);
    } catch (IOException ex) {
    JOptionPane.showMessageDialog(this, ex.getMessage(),
    "错误提示", JOptionPane.ERROR_MESSAGE);
    }
    }
    }