java 文件及文件夹拷贝



View.java

package com.liang;

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class View extends JFrame {
	JTextField src = null;
	JTextField des = null;
	JButton srcSelect = null;
	JButton desSelect = null;
	static JProgressBar progressBar = null;
	JButton OK = null;
	JButton reset=null;
	JPanel panel = null;
	public static void main(String[] args) {
		new View();
	}
	public View() {
		this.setBounds(300, 200, 425, 200);
		this.setTitle("拷贝");
		this.setResizable(false);
		init();
		addComponent();
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	private void init() {

		panel = new JPanel();
		src = new JTextField(25);
		des = new JTextField(25);
		src.setEnabled(false);
		des.setEnabled(false);
//		src.setBackground(Color.lightGray );
//		des.setBackground(Color.lightGray );
		srcSelect = new JButton("浏览");
		desSelect = new JButton("浏览");
		// 创建进度条
		progressBar = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);
		// 创建进度条当前值
		progressBar.setValue(0);
		// 设置进度条上是否显示%比
		progressBar.setStringPainted(true);
		// 设置进度条默认大小
		progressBar.setPreferredSize(new Dimension(350, 20));
		progressBar.setBackground(Color.white);
		progressBar.setForeground(Color.green);
		OK = new JButton("拷贝");
		reset=new JButton("重置");
	}

	private void addComponent() {
		this.add(panel);
		// 创建监听器
		 Listener listener=new Listener(this);
		panel.add(new JLabel("源文件"));
		panel.add(src);
		panel.add(srcSelect);
		srcSelect.setActionCommand("srcSelect");
		srcSelect.addActionListener(listener);
		panel.add(new JLabel("目标位置"));
		panel.add(des);
		panel.add(desSelect);
		desSelect.setActionCommand("desSelect");
		desSelect.addActionListener(listener);
		panel.add(progressBar);
		OK.setActionCommand("OK");
		OK.addActionListener(listener);
		panel.add(OK);
		
		reset.setActionCommand("reset");
		reset.addActionListener(listener);
		panel.add(reset);
	}

}


DirCopy.java


package com.liang;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class DirCopy {
	static double cruent=0;
	public static void dirCopy(String src,String des)throws Exception{
		File srcFile=new File(src);
		
		File desFile=new File(des);
		if(!desFile.exists()){
			desFile.mkdir();
			//System.out.println("YYY:"+desFile.getAbsolutePath());
		}
		File []fs=null;
		//如果srcFiles是文件 
		if(srcFile.isFile()){
			fs=new File[]{srcFile};
		}else if(srcFile.isDirectory()){
			desFile=new File(desFile.getAbsolutePath()+"/"+srcFile.getName());
			desFile.mkdir();
			fs=srcFile.listFiles();
		}
		
		for(File f:fs){
			String newSrc=f.getAbsolutePath();
			String newDes=desFile.getAbsolutePath()+"/"+f.getName();
			if(f.isFile()){
				FileCopy.flieCopy(newSrc, newDes);
			}else if(f.isDirectory()){
				dirCopy(newSrc, newDes);
			}
		}
	}

}


FileCopy.java


package com.liang;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileCopy {
	static final int SIZE=1024*1024*15;
	public static void flieCopy(String src,String des)throws Exception{
		File srcFile=new File(src);
		File desFile=new File(des);
		FileInputStream fis=new FileInputStream(srcFile);
		FileOutputStream fos=new FileOutputStream(desFile);
		byte b[]=new byte[FileCopy.SIZE];
		int n;
		long length=srcFile.length();
		while((n=fis.read(b))!=-1){
			fos.write(b,0,n);
			DirCopy.cruent+=n;
			//System.out.println("cruent:"+DirCopy.cruent);
			//System.out.println("Listener.Length:"+Listener.Length);
			int precent=(int)( (DirCopy.cruent/Listener.Length)*100);
			View.progressBar.setValue(precent);
			if(precent==100){
				long endTime=System.currentTimeMillis();
				System.out.println(endTime-Listener.startTime);
			}
			//System.out.println(precent);
			
		}
		fos.close();
		fis.close();
	}

}

Listener.java

package com.liang;

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

import javax.swing.JFileChooser;
import javax.swing.JLabel;

public class Listener implements ActionListener{
	View view=null;
	String src=null;
	String des=null;
	static double Length = 0;
	static long startTime=0;
	public Listener(View view){
		this.view=view;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		if(e.getActionCommand().equals("srcSelect")){
			src=getSelectFileName(JFileChooser.FILES_AND_DIRECTORIES );
			//System.out.println(src);
			view.src.setText(src);
		}else if(e.getActionCommand().equals("desSelect")){
			des=getSelectFileName(JFileChooser.DIRECTORIES_ONLY);
			//System.out.println(des);
			view.des.setText(des);
		}else if(e.getActionCommand().equals("reset")){
			view.src.setText("");
			view.des.setText("");
			View.progressBar.setValue(0);
			
		}else if(e.getActionCommand().equals("OK")){
			startTime=System.currentTimeMillis();
			//System.out.println(startTime);
			if(src!=null&&src!=null){
				//获得拷贝文件或文件夹的总大小
				Length=getLength(src);
				new Thread(new Runnable() {
					@Override
					public void run() {
						try {
							DirCopy.dirCopy(src, des);
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}).start();;
			}
			long endTime=System.currentTimeMillis();
			
		}
	}

	private String getSelectFileName(int mode) {
		JFileChooser jfc=new JFileChooser();
		jfc.setFileSelectionMode(mode);
		jfc.showDialog(new JLabel(), "选择");
		File file=jfc.getSelectedFile();
		if(file==null) return null;
		return file.getAbsolutePath();
//		if(file.isDirectory()){
//			System.out.println("文件夹:"+file.getAbsolutePath());
//		}else if(file.isFile()){
//			System.out.println("文件:"+file.getAbsolutePath());
//		}
//		System.out.println(jfc.getSelectedFile().getName());
		
	}
	private double getLength(String src) {
		double length = 0;
		File file = new File(src);
		// System.out.println("get:"+src);
		if (file.isFile())
			return file.length();
		File fs[] = file.listFiles();
		for (File f : fs) {
			if (f.isDirectory()) {
				length += getLength(f.getAbsolutePath());
			} else {
				length += f.length();
			}
		}
		return length;
	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值