如何在JList的Jfilechooser中同时保存多个文件?

时间:2018-01-28 12:07:10

标签: java list zip jlist jfilechooser

如何在JList的Jfilechooser中同时保存多个文件?
现在我只能保存一个我从List中选择的MIDI文件。

我的想法

我已经在谷歌搜索了很长时间。我没有好主意。
- 更改"获取模型()"某事。
- 使用Zip系统。
- 选择所有文件。
- 重复保存操作。

private class MidiFileChooser extends JFileChooser {
        {
            setFileFilter(new FileNameExtensionFilter("MIDI sequence (*.mid)", "mid"));
        }
        /**
         * File Save Action
         */
        public Action saveMidiFileAction = getModel().new SelectedSequenceAction(
            "Save",
            "Save selected MIDI sequence to file - Save a selected MIDI flies"
        ) {
            @Override
            public void actionPerformed(ActionEvent event) {
                PlaylistTableModel playlistModel = getModel();
                SequenceTrackListTableModel sequenceModel = playlistModel.getSelectedSequenceModel();
                String fn = sequenceModel.getFilename();
                if( fn != null && ! fn.isEmpty() ) setSelectedFile(new File(fn));
                if( showSaveDialog((Component)event.getSource()) != JFileChooser.APPROVE_OPTION ) return;

                File f = getSelectedFile();
                if( f.exists() ) {
                    fn = f.getName();
                    if( ! confirm("Overwrite " + fn + " ?\n" + fn + “ is OK?") ) return;
                }
                try ( FileOutputStream out = new FileOutputStream(f) ) {
                    out.write(sequenceModel.getMIDIdata());
                    sequenceModel.setModified(false);
                    playlistModel.fireSequenceModified(sequenceModel, false);
                }
                catch( IOException ex ) {
                    ex.printStackTrace();
                    showError( ex.getMessage() );
                }
            }
        };

1 个答案:

答案 0 :(得分:0)

我解释了有关File [] files = getSelectedFiles();

的更改的详细信息
public Action saveMidiFileAction = getModel().new SelectedSequenceAction(
                "Save",
                "Save selected MIDI sequence to file"
            ) {
                @Override
                public void actionPerformed(ActionEvent event) {
                    PlaylistTableModel playlistModel = getModel();
                    SequenceTrackListTableModel sequenceModel = playlistModel.getSelectedSequenceModel();
                    String fn = sequenceModel.getFilename();
                    if( fn != null && ! fn.isEmpty() ) setSelectedFile(new File(fn));
                    if( showSaveDialog((Component)event.getSource()) != JFileChooser.APPROVE_OPTION ) return;


                JFileChooser filechooser = new JFileChooser();
                filechooser.setMultiSelectionEnabled(true);

                File[] files = getSelectedFiles();

                String timerecord = String.valueOf(Math.random());

                try ( FileOutputStream out = new FileOutputStream(timerecord + ".mid") ) {
                    out.write(sequenceModel.getMIDIdata());
                    sequenceModel.setModified(false);
                    playlistModel.fireSequenceModified(sequenceModel, false);
                }
                catch( IOException ex ) {
                    ex.printStackTrace();
                    showError( ex.getMessage() );
                }
                }
        };

这是Jfilechooser.class

public void setMultiSelectionEnabled(boolean b) {
    if(multiSelectionEnabled == b) {
        return;
    }
    boolean oldValue = multiSelectionEnabled;
    multiSelectionEnabled = b;
    firePropertyChange(MULTI_SELECTION_ENABLED_CHANGED_PROPERTY, oldValue, multiSelectionEnabled);
}