JFileChooser to open multiple txt files

前端 未结 3 1773
醉梦人生
醉梦人生 2020-12-17 09:51

How can I use JFileChooser to open two text files and after I selected these files, I want to compare them, show on the screen etc. Is this possible?

相关标签:
3条回答
  • 2020-12-17 10:34

    In my case I solved it declaring frame as an initialized local variable set to null:

    JFileChooser chooser = new JFileChooser();
    chooser.setMultiSelectionEnabled(true);
    
    Component frame = null;
    
    chooser.showOpenDialog(frame);
    File[] files = chooser.getSelectedFiles();
    
    0 讨论(0)
  • 2020-12-17 10:47

    You can use:

    JFileChooser chooser = new JFileChooser();
    chooser.setMultiSelectionEnabled(true);
    
    // Show the dialog; wait until dialog is closed
    chooser.showOpenDialog(frame);
    
    // Retrieve the selected files.
    File[] files = chooser.getSelectedFiles();
    

    You can then use the file handles returned to do the compare.

    0 讨论(0)
  • 2020-12-17 10:50

    You can have your JFileChooser select multiple files and return an array of File objects instead of one

    JFileChooser chooser = new JFileChooser();
    chooser.setMultiSelectionEnabled(true);
    chooser.showOpenDialog(frame);
    File[] files = chooser.getSelectedFiles();
    

    The method showOpenDialog(frame) only returns once you click the ok button

    EDIT

    So do this:

    JFileChooser chooser = new JFileChooser();
    chooser.setMultiSelectionEnabled(true);
    chooser.showOpenDialog(frame);
    File[] files = chooser.getSelectedFiles();
    if(files.length >= 2) {
        compare(readFileAsList(files[0]), readFileAsList(files[1]));
    }
    

    And change your readFileAsList to:

    private static List<String> readFileAsList(File file) throws IOException {
        final List<String> ret = new ArrayList<String>();
        final BufferedReader br = new BufferedReader(new FileReader(file));
        try {
            String strLine;
            while ((strLine = br.readLine()) != null) {
                ret.add(strLine);
            }
            return ret;
        } finally {
            br.close();
        }
    }
    
    0 讨论(0)
提交回复
热议问题