java中的文件复制

java中的文件复制,java,swing,file,jlist,Java,Swing,File,Jlist,我已经通过JFileChooser使用向量将一些文件添加到我的JList中。我试图通过检查JList中是否有特定的文件来系统地创建它。例如,如果我添加了一个名为“abc.xml”的文件,我会立即检查JList中是否存在该文件 另外,我想检查文件是否只重复一次。如果重复多次('abc.xml'、'abc.xml'、…),则会出现一条错误消息,指示该文件已添加多次 我在这里张贴我的完整代码 public Test() { setTitle("EXAMPLE");

我已经通过
JFileChooser
使用
向量
将一些文件添加到我的
JList
中。我试图通过检查
JList
中是否有特定的文件来系统地创建它。例如,如果我添加了一个名为“abc.xml”的文件,我会立即检查
JList
中是否存在该文件

另外,我想检查文件是否只重复一次。如果重复多次('abc.xml'、'abc.xml'、…),则会出现一条错误消息,指示该文件已添加多次

我在这里张贴我的完整代码

         public Test() 
{
    setTitle("EXAMPLE");
    getContentPane().setLayout(new MigLayout("", "[][][][][grow][][][][][][][]
               [][][grow][grow][][][grow][][][][][][][grow]", "[][][][][][][][grow]
              [grow][][][][][][][grow][]"));

    final JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    fileChooser.setMultiSelectionEnabled(true);
    getContentPane().add(fileChooser, "cell 0 1 3 16");

    JScrollPane scrollPane = new JScrollPane();
    getContentPane().add(scrollPane, "cell 23 2 3 15,grow");

    vector = new Vector<File>();
    final JList list = new JList(vector);
    scrollPane.setViewportView(list);


    JButton btnNewButton = new JButton(" Add          ");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            for (File file : fileChooser.getSelectedFiles()) {
                        vector.addElement(file);
                 }
                //System.out.println("Added..!!");
                list.updateUI();

            }
    });
    getContentPane().add(btnNewButton, "cell 4 0");



    JButton btnNewButton_1 = new JButton(" Remove   ");
    btnNewButton_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(list.getSelectedIndices().length > 0) {
                  int[] selectedIndices = list.getSelectedIndices();
                  for (int i = selectedIndices.length-1; i >=0; i--) {
                        vector.removeElementAt(i);
                    } 
                   }
                    //System.out.println("Removed..!!");
                    list.updateUI();

        }   
        });
    getContentPane().add(btnNewButton_1, "cell 4 2");

    JButton btnNewButton_2 = new JButton(" Check       ");
    btnNewButton_2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            ***File file = fileChooser.getSelectedFile();
            boolean found = false;
            for (File f : vector) {
                 if (file.getName().equals(f.getName())) {
                     found = true;
                     break;
                 }
            }
            if (!found) {
                vector.add(file);
                fireIntervalAdded(this, vector.size()-1, vector.size()-1);
            } else {
                // Abusive usage of an exception
                JOptionPane.showMessageDialog(null, "File " + file.getName() + " 
                already added");

            }***
         });

           public static void main(String args[]) {        
          // Create an instance of the test application         
           Test mainFrame = new Test();        
           mainFrame.pack();         
           mainFrame.setVisible(true);     
  }
公共测试()
{
setTitle(“示例”);
getContentPane()
[]增长[]增长[]增长[]增长[]增长[]增长],“[]增长]
[成长][][]][]成长][]”);
final JFileChooser fileChooser=新JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES\u和\u目录);
fileChooser.setMultiSelectionEnabled(true);
getContentPane().add(文件选择器,“单元格0 1 3 16”);
JScrollPane scrollPane=新的JScrollPane();
getContentPane().add(滚动窗格,“单元格23 2 3 15,增长”);
向量=新向量();
最终JList列表=新JList(矢量);
scrollPane.setViewportView(列表);
JButton btnNewButton=新JButton(“添加”);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
对于(文件:fileChooser.getSelectedFiles()){
矢量加法(文件);
}
//System.out.println(“添加..!!”;
list.updateUI();
}
});
getContentPane();
JButton btnNewButton_1=新JButton(“删除”);
btnNewButton_1.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
if(list.getSelectedIndices().length>0){
int[]selecteddinces=list.getselecteddinces();
for(int i=selecteddinces.length-1;i>=0;i--){
向量移除元素(i);
} 
}
//System.out.println(“删除..!!”;
list.updateUI();
}   
});
getContentPane().add(btnNewButton_1,“单元格4 2”);
JButton btnNewButton_2=新JButton(“检查”);
btnNewButton_2.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
***File File=fileChooser.getSelectedFile();
布尔值=false;
用于(文件f:vector){
如果(file.getName().equals(f.getName())){
发现=真;
打破
}
}
如果(!找到){
添加(文件);
fireIntervalAdded(这个,vector.size()-1,vector.size()-1);
}否则{
//滥用例外
JOptionPane.showMessageDialog(null,“文件”+文件.getName()+”
已添加“);
}***
});
公共静态void main(字符串args[]){
//创建测试应用程序的实例
测试主机=新测试();
mainFrame.pack();
mainFrame.setVisible(true);
}
我得到的是,一个消息框告诉我,即使文件只出现一次,也已经添加了该文件

我所期望的是,当文件被添加一次时,它不应该显示任何内容。但是当它被添加多次时,它才应该显示文件已经被添加的消息

有人能帮忙吗

vector.contains(fileName)

首先从这个开始?

好的,下面是一个您描述的示例。我不太确定拒绝添加文件的条件是什么。这个是基于名称的,但我想知道您是否正在使用first
getCanonicalFile()
查找
文件。equals()
。我在代码中的注释中也显示了这一点

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Vector;

import javax.swing.AbstractListModel;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class Test {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                initUI();
            }
        });
    }

    public static class MyListModel extends AbstractListModel {

        private Vector<File> files = new Vector<File>();

        public void addFilesToModel(File[] f) {
            for (File file : f) {
                addFileToModel(file);
            }
        }

        public void addFileToModel(File file) throws IllegalArgumentException {
            boolean found = false;
            // file = file.getCanonicalFile();
            for (File file2 : files) {
                // file2.getCanonicalFile().equals(file) + throw IOException
                if (file2.getName().equals(file.getName())) {
                    found = true;
                    break;
                }
            }
            if (!found) {
                files.add(file);
                fireIntervalAdded(this, files.size() - 1, files.size() - 1);
            } else {
                // Abusive usage of an exception
                throw new IllegalArgumentException("File " + file.getName() + " already added");
            }
        }

        @Override
        public int getSize() {
            return files.size();
        }

        @Override
        public Object getElementAt(int index) {
            return files.get(index);
        }

    }

    private static File lastFolder;

    protected static void initUI() {
        JFrame frame = new JFrame("test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        final MyListModel model = new MyListModel();
        JList list = new JList(model);
        final JButton button = new JButton("Add files...");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser chooser = new JFileChooser();
                if (lastFolder != null) {
                    chooser.setCurrentDirectory(lastFolder);
                }
                chooser.setMultiSelectionEnabled(true);
                chooser.showDialog(button, "Add files");
                if (chooser.getSelectedFiles() != null) {
                    for (File file : chooser.getSelectedFiles()) {
                        try {
                            model.addFileToModel(file);
                        } catch (IllegalArgumentException e1) {
                            JOptionPane.showMessageDialog(button, e1.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                        }
                    }
                    lastFolder = chooser.getCurrentDirectory();
                }
            }
        });
        panel.add(new JScrollPane(list));
        panel.add(button);
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.File;
导入java.util.Vector;
导入javax.swing.AbstractListModel;
导入javax.swing.JButton;
导入javax.swing.JFileChooser;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.SwingUtilities;
公开课考试{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
initUI();
}
});
}
公共静态类MyListModel扩展了AbstractListModel{
私有向量文件=新向量();
public void addFilesToModel(文件[]f){
for(文件:f){
addFileToModel(文件);
}
}
public void addFileToModel(文件文件)引发IllegalArgumentException{
布尔值=false;
//file=file.getCanonicalFile();
用于(文件2:文件){
//file2.getCanonicalFile().equals(文件)+抛出IOException
if(file2.getName().equals(file.getName())){
发现=真;
打破
}
}
如果(!找到){
文件。添加(文件);
fireIntervalAdded(这个,files.size()-1,files.size()-1);
}否则{
//滥用例外
抛出新的IllegalArgumentException(“文件”+File.getName()+“已添加”);
}
}
@凌驾
公共int getSize(){
返回文件.size();
}
@凌驾
公共对象getElementAt(int索引){
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Vector;

import javax.swing.AbstractListModel;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class Test extends JFrame {

    Vector<File> vector;
    JPanel root;
    private MyListModel model;

    public class MyListModel extends AbstractListModel {

        public void addFilesToModel(File[] f) {
            for (File file : f) {
                addFileToModel(file);
            }
        }

        public void addFileToModel(File file) throws IllegalArgumentException {
            boolean found = false;
            // file = file.getCanonicalFile();
            for (File file2 : vector) {
                // file2.getCanonicalFile().equals(file) + throw IOException
                if (file2.getName().equals(file.getName())) {
                    found = true;
                    break;
                }
            }
            if (!found) {
                vector.add(file);
                fireIntervalAdded(this, vector.size() - 1, vector.size() - 1);
            } else {
                // Abusive usage of an exception
                throw new IllegalArgumentException("File " + file.getName() + " already added");
            }
        }

        public void removeFileFromModel(File file) throws IllegalArgumentException {
            int index = vector.indexOf(file);
            File removed = vector.remove(index);
            if (removed != null) {
                fireIntervalRemoved(this, index, index);
            } else {
                // Nothing was removed
            }
        }

        public void removeFilesFromModel(File[] files) {
            for (File f : files) {
                removeFileFromModel(f);
            }
        }

        @Override
        public int getSize() {
            return vector.size();
        }

        @Override
        public Object getElementAt(int index) {
            return vector.get(index);
        }

    }

    public Test() {
        super("EXAMPLE");
        root = new JPanel(new GridBagLayout());
        vector = new Vector<File>();
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridheight = 2;
        getContentPane().add(root);
        final JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        fileChooser.setMultiSelectionEnabled(true);
        root.add(fileChooser, gbc);
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.ipadx = 5;
        gbc.ipady = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 3;
        gbc.gridx = 1;

        vector = new Vector<File>();
        model = new MyListModel();
        final JList list = new JList(model);
        JScrollPane scrollPane = new JScrollPane(list);
        root.add(scrollPane, gbc);
        gbc.gridwidth = 1;
        gbc.weightx = 0;
        gbc.weighty = 0;
        gbc.anchor = GridBagConstraints.CENTER;
        final JButton btnNewButton = new JButton("Add");
        btnNewButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for (File file : fileChooser.getSelectedFiles()) {
                    try {
                        model.addFileToModel(file);
                    } catch (IllegalArgumentException e1) {
                        showError(btnNewButton, file);
                    }
                }
            }
        });
        gbc.gridy = 1;
        root.add(btnNewButton, gbc);

        JButton btnNewButton_1 = new JButton("Remove");
        btnNewButton_1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (list.getSelectedIndices().length > 0) {
                    for (Object file : list.getSelectedValues()) {
                        model.removeFileFromModel((File) file);
                    }
                }
            }
        });
        gbc.gridx++;
        root.add(btnNewButton_1, gbc);

        final JButton btnNewButton_2 = new JButton("Check");
        btnNewButton_2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                File file = fileChooser.getSelectedFile();
                boolean found = false;
                for (File f : vector) {
                    if (file.getName().equals(f.getName())) {
                        found = true;
                        break;
                    }
                }
                if (found) {
                    showError(btnNewButton_2, file);
                } else {
                    JOptionPane.showMessageDialog(btnNewButton_2, "File " + file.getAbsolutePath() + " is not in the list yet");
                }
            }

        });
        gbc.gridx++;
        root.add(btnNewButton_2, gbc);
    }

    private void showError(Component parent, File file) {
        JOptionPane.showMessageDialog(parent, "File " + file.getName() + " already added");
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                Test mainFrame = new Test();
                mainFrame.pack();
                mainFrame.setVisible(true);
            }
        });
    }
}