热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java文件及文件夹拷贝

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;
	}

}






java 文件及文件夹拷贝,,

java 文件及文件夹拷贝


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
author-avatar
中医鸣芳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有