Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFileChooser和eclipse_Java_Eclipse_Swing_Jfilechooser - Fatal编程技术网

Java JFileChooser和eclipse

Java JFileChooser和eclipse,java,eclipse,swing,jfilechooser,Java,Eclipse,Swing,Jfilechooser,我正在寻找一种方法,让JFileChooser允许用户从包含在eclipse项目的bin文件中的txt文件中进行选择。有没有办法弹出JFileChooser并显示bin文件夹中的选定数量的txt文件?您可以参考以下代码,只需指定文件夹/dir的绝对或相对路径即可 JFileChooser chooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( "TXT file

我正在寻找一种方法,让JFileChooser允许用户从包含在eclipse项目的bin文件中的txt文件中进行选择。有没有办法弹出JFileChooser并显示bin文件夹中的选定数量的txt文件?

您可以参考以下代码,只需指定文件夹/dir的绝对或相对路径即可

JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
    "TXT files", "txt");
chooser.setFileFilter(filter);
chooser.setCurrentDirectory("<YOUR DIR COMES HERE>");
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
   System.out.println("You chose to open this file: " +
        chooser.getSelectedFile().getName());
}
JFileChooser chooser=newjfilechooser();
FileNameExtensionFilter=新FileNameExtensionFilter(
“TXT文件”、“TXT”);
选择器.setFileFilter(过滤器);
chooser.setCurrentDirectory(“”);
int returnVal=chooser.showOpenDialog(父级);
if(returnVal==JFileChooser.APPROVE_选项){
System.out.println(“您选择打开此文件:”+
chooser.getSelectedFile().getName());
}

那么您只想在目录中显示某些文本文件

使用
FileFilter
将根据文件名的
ArrayList
检查文件名,如果找到匹配项,将返回
true
,从而允许
JFileChooser
显示文件名

比如:

JFileChooser fc=..;
fc.setCurrentDirectory(new File("path/to/bin/"));//put path to bin here

 ....     

 ArrayList<String> filesToSee=new ArrayList<>();
 //add names of files we want to be visible to user of JFileChooser
 filesToSee.add("file1.txt");
 filesToSee.add("file2.txt");

fc.addChoosableFileFilter(new MyFileFilter(filesToSee));

//By default, the list of user-choosable filters includes the Accept All filter, which        enables the user to see all non-hidden files. This example uses the following code to disable the Accept All filter:
fc.setAcceptAllFileFilterUsed(false);

....

class MyFileFilter extends FileFilter {

     private ArrayList<String> files;

     public MyFileFilter(ArrayList<String> files) {
         this.files=files;
     }

    //Accept only files in passed array
    public boolean accept(File f) {

        for(String s:files) {
            if(f.getName().equals(s)) {
                return true;
             }
        }

        return false;
    }

    //The description of this filter
    public String getDescription() {
        return "Specific Files";
    }
}
JFileChooser fc=。。;
fc.setCurrentDirectory(新文件(“path/to/bin/”)//把垃圾箱的路径放在这里
....     
ArrayList filesToSee=新的ArrayList();
//添加我们希望JFileChooser用户可见的文件名
filesToSee.add(“file1.txt”);
filesToSee.add(“file2.txt”);
fc.addChoosableFileFilter(新的MyFileFilter(FileToSee));
//默认情况下,用户可选择的筛选器列表包括“全部接受”筛选器,使用户可以查看所有非隐藏文件。此示例使用以下代码禁用“全部接受”筛选器:
fc.setAcceptableFileFilterUsed(false);
....
类MyFileFilter扩展了FileFilter{
私有ArrayList文件;
公共MyFileFilter(ArrayList文件){
this.files=文件;
}
//仅接受传递数组中的文件
公共布尔接受(文件f){
用于(字符串s:文件){
如果(f.getName().equals){
返回true;
}
}
返回false;
}
//此筛选器的说明
公共字符串getDescription(){
返回“特定文件”;
}
}
参考:


另一种方法是实现FileSystemView,以便它只显示您的目录,并防止在层次结构或其他“驱动器”中向上移动

下面是这样一个文件系统视图的演示。输入中只需提供根目录(即到bin的路径,如果工作目录被认为是Eclipse项目的根目录,则可能是
newfile(“bin”)
,这是Eclipse默认的做法)


@Nicolay Kuznetsov Hi..谢谢..但是有没有办法只指向某个给定项目的eclipse bin文件夹中的txt文件?谢谢,但我想解决的问题是如何设置相对路径,以便使用该应用程序的不同用户只能从中选择我设置的txt文件我不明白为什么来自应用程序需要查看不相关eclipse项目中的txt文件列表。请用Eclipse项目结构和您如何运行应用程序更新问题。如果从JAR运行,那么它必须是绝对路径。您是从Eclipse、JAR还是两者都运行应用程序?用户会从Eclipse运行应用程序吗?“如果没有,你的问题就没有意义了。”我同意纪尧姆波尔特的说法。相对路径仅适用于从Eclipse运行。否则,您需要使用绝对路径,但是您试图做的是不可理解的。是的,他们将从Eclipse运行演示。要做到这一点,应该很简单。例如,您可以给文件读取器对象一个带有txt文件名的字符串,eclipse就可以找到它。所以现在我只想找到一种方法来创建一个指向bind文件夹的目录,并拾取txt文件
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.filechooser.FileSystemView;

public class TestJFileChooser2 {

    public static class MyFileSystemView extends FileSystemView {

        private File root;

        public MyFileSystemView(File root) {
            super();
            try {
                this.root = root.getCanonicalFile();
            } catch (IOException e) {
                this.root = root;
            }
        }

        @Override
        public File[] getRoots() {
            return new File[] { root };
        }

        @Override
        public File createNewFolder(File containingDir) throws IOException {
            return FileSystemView.getFileSystemView().createNewFolder(containingDir);
        }

        @Override
        public File createFileObject(String path) {
            File file = super.createFileObject(path);
            if (isEmbedded(file)) {
                return file;
            } else {
                return root;
            }
        }

        @Override
        public File createFileObject(File dir, String filename) {
            if (isEmbedded(dir)) {
                return super.createFileObject(dir, filename);
            } else {
                return root;
            }

        }

        @Override
        public File getDefaultDirectory() {
            return root;
        }

        private boolean isEmbedded(File file) {
            while (file != null && !file.equals(root)) {
                file = file.getParentFile();
            }
            return file != null;
        }

        @Override
        public File getParentDirectory(File dir) {
            File parent = dir.getParentFile();
            if (isEmbedded(parent)) {
                return parent;
            } else {
                return root;
            }
        }
    }

    protected void initUI() {
        JFrame frame = new JFrame("Test file chooser");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JButton ok = new JButton("Click me to select file");
        ok.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                EventQueue.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        final JFileChooser openFC = new JFileChooser(new MyFileSystemView(new File("")));
                        openFC.setDialogType(JFileChooser.OPEN_DIALOG);
                        // Configure some more here
                        openFC.showDialog(ok, null);
                    }
                });
            }
        });
        frame.add(ok);
        frame.setBounds(100, 100, 300, 200);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {

                new TestJFileChooser2().initUI();
            }
        });
    }
}