`
firecool
  • 浏览: 82156 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

文件拷贝工具

    博客分类:
  • java
阅读更多

package jp.swtech;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.util.Date;

import javax.swing.Box;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class FileCopyTool extends JFrame {
    
    private static final long serialVersionUID = -2279866387292940681L;

    private String pathDest = "";
    
    private String pathSrc = "";
    
    private DefaultListModel model = null;
    
    public FileCopyTool(){
        super();
        setSize(250,400);
        initComponents();
    }
    
    private void initComponents(){
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBounds(10, 10, 10, 10);
        JLabel lblDest = new JLabel("目标路径:");
        txtDest = new JTextField(30);
        btnClear = new JButton("清空");
        btnClear.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
               File[] fs = new File(pathDest).listFiles();
               for(File f : fs){
                   f.delete();
               }
            }});
        btnCopy = new JButton("拷贝");
        btnCopy.addActionListener(new BtnCopyAction());
        Box box = Box.createHorizontalBox();
        box.add(lblDest);
        box.add(Box.createHorizontalStrut(5));
        box.add(txtDest);
        box.add(Box.createHorizontalStrut(5));
        box.add(btnClear);
        box.add(btnCopy);
        panel.add(box,BorderLayout.NORTH);
        
        JLabel lblSrc = new JLabel("源路径:");
        txtSrc = new JTextField(30);
        btnLoad = new JButton("加载文件");
        btnLoad.addActionListener(new BtnLoadAction());
        box = Box.createHorizontalBox();
        box.add(lblSrc);
        box.add(Box.createHorizontalStrut(5));
        box.add(txtSrc);
        box.add(Box.createHorizontalStrut(5));
        box.add(btnLoad);
        panel.add(box,BorderLayout.SOUTH);
        
        model = new DefaultListModel();
        fileList = new JList(model);
        fileList.addListSelectionListener(new SelectionListener());
        panel.add(new JScrollPane(fileList),BorderLayout.CENTER);
        add(panel);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception e) {
            e.printStackTrace();
        }
        SwingUtilities.updateComponentTreeUI(this);
    }
    
    private class SelectionListener implements ListSelectionListener{

        public void valueChanged(ListSelectionEvent e) {
            JList lst = (JList)e.getSource();
            pathSrc = txtSrc.getText().trim() + File.separator + lst.getSelectedValue();
            System.out.println("当前拷贝路径" + pathSrc);
        }
    }
    
    private class BtnLoadAction implements ActionListener{

        public void actionPerformed(ActionEvent e) {
            try {
                model.removeAllElements();
                pathDest = txtDest.getText().trim();
                pathSrc = txtSrc.getText().trim();
                if(checked()){
                    File file = new File(pathSrc);
                    File[] files = file.listFiles();
                    for(File f : files)
                        model.addElement(f.getName());
                }
            } catch (Exception e1) {
                show("读取源目录发生异常!");
            }
        }
        
    }
    
    private class BtnCopyAction implements ActionListener{

        public void actionPerformed(ActionEvent e) {
            if(checked()){
                try {
                    for(File f : new File(pathDest).listFiles()){
                        if(f.isFile()) f.delete();
                    }
                    File fs = new File(pathSrc);
                    if(fs.isFile()){
                        File toFile = new File(pathDest + File.separator + fs.getName());
                        forImage(fs,toFile);
                        return;
                    }
                    File[] files = fs.listFiles();
                    for(File f : files){
                        if(!f.isFile()) return;
                        File toFile = new File(pathDest + File.separator + f.getName());
                        forImage(f,toFile);
                    }
                    show("复制文件成功!");
                } catch (Exception e1) {
                    show("复制文件的时候发生异常!");
                }
            }
        }
        
    }
    
    private boolean checked(){
        if(pathDest.equals("")){
            show("目标路径不能为空");
            return false;
        }
        if(pathSrc.equals("")){
            show("源路径不能为空");
            return false;
        }
        return true;
    }
    
    private void show(String msg){
        JOptionPane.showMessageDialog(this, msg,"错误",JOptionPane.ERROR_MESSAGE);
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        FileCopyTool fct = new FileCopyTool();
        fct.setVisible(true);
    }
    
    public static long forImage(File f1, File f2) throws Exception {
        long time = new Date().getTime();
        int length = 2097152;
        FileInputStream in = new FileInputStream(f1);
        RandomAccessFile out = new RandomAccessFile(f2, "rw");
        FileChannel inC = in.getChannel();
        MappedByteBuffer outC = null;
        MappedByteBuffer inbuffer = null;
        byte[] b = new byte[length];
        while (true) {
            if (inC.position() == inC.size()) {
                inC.close();
                outC.force();
                out.close();
                return new Date().getTime() - time;
            }
            if ((inC.size() - inC.position()) < length) {
                length = (int) (inC.size() - inC.position());
            } else {
                length = 20971520;
            }
            b = new byte[length];
            inbuffer = inC.map(MapMode.READ_ONLY, inC.position(), length);
            inbuffer.load();
            inbuffer.get(b);
            outC = out.getChannel().map(MapMode.READ_WRITE, inC.position(), length);
            inC.position(b.length + inC.position());
            outC.put(b);
            outC.force();
            out.close();
            in.close();
        }
    } 


    JButton btnCopy = null;
    JTextField txtDest = null;
    JTextField txtSrc = null;
    JList fileList = null;
    JButton btnLoad = null;
    JButton btnClear = null;
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics