`

文件复制附带进度条

阅读更多

 

 

package com.io.copyfile;

 

import java.awt.BorderLayout;

import java.awt.Frame;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

 

import javax.swing.JDialog;

import javax.swing.JFileChooser;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JProgressBar;

import org.apache.log4j.Logger;

 

/**

 * 弹出对话框选择任意文件进行复制 复制新文件在项目跟目录

 * 

 * @author <a href="mailto:qiyang199132@163.com">qiyang</a>

 * @version $Revision$

 * @create 2011-5-9 下午02:47:21

 */

public class CopyFile {

private final static Logger log = Logger.getLogger(CopyFile.class);

 

public static void main(String[] args) {

CopyFile cf = new CopyFile();

File file = cf.getFile();

if (file == null) {

JOptionPane.showMessageDialog(null, "错误操作", "提示", 1);

} else {

cf.coypFile(file);

}

}

 

/**

* 弹出对话框选择文件

* @return 返回选择的文件

*/

public File getFile() {

JFileChooser jf = new JFileChooser();

jf.setDialogTitle("选择文件");

jf.showOpenDialog(null);

jf.setVisible(true);

File selectedFile = null;

selectedFile = jf.getSelectedFile();

if (selectedFile != null) {

File[] list = new File(System.getProperty("user.dir")).listFiles();

for (int i = 0; i < list.length; i++) {

if (selectedFile.getName().equals(list[i].getName())) {

JOptionPane.showMessageDialog(null, "改文件已存在", "提示", 1);

return null;

}

}

} else {

System.out.println("No! You did not select the right file.");

}

return selectedFile;

}

 

/**

* 对传进来的文件进行复制并放入项目跟目录

* @param file 传进来的文件

*/

public void coypFile(File file) {

String path = System.getProperty("user.dir");

try {

/**

* 文件字节长度

*/

int length = (int) file.length();

/**

* 输入流 读取文件

*/

FileInputStream is = new FileInputStream(file);

/**

* 输出流写文件

*/

FileOutputStream os = new FileOutputStream(path + "/" + file.getName());

/**

* 缓存

*/

byte[] bt = new byte[256];

/**

* 定义字节接受每次读取的长度

*/

int b = 0;

/**

* 定义一次读取的长度 然后++得到已经复制多少

*/

int size = 0;

/**

* 定义frame

*/

Frame frame=new Frame("进度条");

/**

* 定义一个对话框并设置样式

*/

final JDialog dlg = new JDialog(frame, "Progress Dialog", true);

/**

* 定义一个进度条 size   和  length  为 参数  

*/

JProgressBar dpb = new JProgressBar(size,length);

/**

* 设置对话框样式

*/

       dlg.add(BorderLayout.CENTER, dpb);

       dlg.add(BorderLayout.NORTH, new JLabel("正在复制..."));

       dlg.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);

       dlg.setSize(300, 75);

       /**

        * 设置相对值 给frame

        */

       dlg.setLocationRelativeTo(frame);

       /**

        * 定义线程

        * 对进度条进行监控

        */

       Thread t=new Thread(new Runnable() {

@Override

public void run() {

dlg.setVisible(true);

}

});

       /**

        * 开启线程

        */

       t.start();

       /**

        * 循环

        * 读取文件   让以读取的++

        * 写文件 设置 进度条的进度++

        */

while ((b = is.read(bt)) != -1) {

size += b;

os.write(bt);

dpb.setValue(size);

}

/**

* 线程休眠1秒

*/

t.sleep(1000);

/**

* 关闭流

*/

os.close();

is.close();

/**

* 复制完了退出程序

*/

if (dpb.getValue() == length) {

                dlg.setVisible(false);

                System.exit(0);

            }

} catch (FileNotFoundException e) {

log.error("文件找不到");

} catch (IOException e) {

log.error("IO异常");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

 

 


 

0
3
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    VB.NET U盘自动多线程复制 附带源码

    简介:自己开发的工具,用于对批量的移动设备(U盘等)进行文件复制。 使用的场景:用于批量制造资源U盘时使用,然后复制同一个文件夹下的所有文件到所有U盘中。采用多线程同时复制的方式。 使用说明: 1、选择需要...

    文件相关处理程式(delphi)

    4. **文件复制**: 在Delphi中,复制文件可以使用TFile.Copy方法,它允许复制一个文件到新的位置,同时可以选择是否覆盖已存在的文件。复制过程包括打开源文件,创建目标文件,然后将源文件的内容写入目标文件。 5...

    xshell4安装文件内附注册文件

    本文将详细介绍如何安装XShell 4并使用附带的注册文件进行激活。 首先,我们打开压缩包,可以看到两个文件:xshell_4.0.0131.1397032097.exe是XShell 4的安装程序,而xshell4sn.txt则是包含注册码的文本文件。这两...

    vscode.zip,附带安装教程

    3. 安装过程:安装程序会自动处理剩余步骤,包括复制文件到指定目录,注册相关组件等。等待进度条完成即可。 4. 启动VSCode:安装完成后,可以通过桌面快捷方式或者开始菜单启动VSCode。首次打开时,可能会有欢迎...

    DropForms_上传_拖拽_

    这通常涉及网络请求,如使用HttpClient发送POST请求,附带文件流或文件路径。 4. **反馈与进度**:提供上传进度和状态反馈,如显示上传进度条,通知用户上传成功或失败的信息。 5. **错误处理**:确保有良好的错误...

    After effects7.0 安装注册汉化详解(附带注册机和汉化补丁)

    4. 完成安装:耐心等待安装进度条走完,然后重启电脑使安装生效。 接下来是注册环节,这一步通常需要注册机的帮助: 1. 使用注册机:注册机是一个能够生成有效序列号的小型应用程序。启动注册机,选择Adobe After ...

    适用Kindle3老版多看0520.rar

    PS:干净卸载过程请参考附带的doc文件,有图解。 ***************************************************************************************************************** 【机子固件是越狱的请看】 ######...

    UpdateSoftWarePackage_Test.zip

    4. **安装更新**:这一步可能涉及到文件操作,如File和Directory类,用于复制、删除和移动文件。如果是.NET Core应用程序,还可以利用NuGet包管理器来安装更新。 5. **重启或覆盖运行**:可能需要使用Process类来...

    C#开发典型模块大全(光盘)

    12.2.2 将文件复制到剪切板 12.2.3 格式转换 12.2.4 图片幻灯片 12.2.5 图片旋转 12.3 设计过程 12.3.1 主窗体 12.3.2 打开图片目录 12.3.3 图片格式转换 12.3.4 设为桌面背景 12.3.5 图片特效 12.3.6 图片调节 12.3...

    Keil入门教程详解

    - **复制示例文件**: 将评估板附带的安装光盘中的`StellarisWare for C1`文件夹复制到C盘根目录下(或自定义位置)。 - **文件路径**: 假设默认路径为`C:\StellarisWareforC1`。 **3. 修改示例工程配置文件** - **...

    C#开发典型模块大全

    12.2.2 将文件复制到剪切板 287 12.2.3 格式转换 288 12.2.4 图片幻灯片 288 12.2.5 图片旋转 289 12.3 设计过程 290 12.3.1 主窗体 290 12.3.2 打开图片目录 291 12.3.3 图片格式转换 292 12.3.4 ...

    Oracle 数据库备份工具(带源码和控件)

    物理备份包括完整数据库备份、增量备份和差异备份,通过复制数据库的数据文件、控制文件和日志文件来实现。逻辑备份则是通过SQL命令(如`EXPDP`和`IMPDP`)导出和导入数据。此工具可能支持这些备份方式,方便用户...

    Foobar2000.AERO效果播放器

    如果你想使用EIKO风格的关联格式文件图标,将icons文件夹复制到你的foobar2000目录下即可,覆盖原有的icons文件夹。 -----配置包的应用---------- 本配置包有两种应用方案,请按需求选择。 不管选哪种,请先安装一份...

    metronic网站模板

    根据你的项目需求,你可以修改HTML、CSS和JavaScript文件,或者复制粘贴所需的组件到你的代码中。记得遵循模板的文件结构和命名规则,以保持代码组织有序。 总之,Metronic是一个强大的前端工具,适用于构建企业级...

    C#编写的图形查看与翻转程式

    2. 图像文件格式支持:程序需要能够读取常见的图像文件格式,如JPEG、PNG、BMP等。这需要使用`System.Drawing`命名空间中的类,如`Image`或`Bitmap`,或者使用WPF的`Imaging`命名空间。 图像翻转功能涉及图像处理...

    心意答快拍仪使用说明

    找到安装文件,通常位于随设备附带的光盘中,如下图所示,双击该文件即可启动安装程序。 ![图1.1](#fig11) **图1.1 安装程序** **1.3 进行安装向导** 双击安装程序后,首先出现的是安装向导初始界面(图1.2)。在...

    Access+2000中文版高级编程

    5.2.2 复制表结构 99 5.2.3 使用Field对象 102 5.2.4 复制查询 102 5.2.5 复制关系 104 5.2.6 复制数据 106 5.3 使用事务加快处理速度 108 5.4 使用定制的属性 109 5.5 小 结 111 第6章 ActiveX...

    Access 2000中文版高级编程(part1)

    14.4.1 使用SysCmd()显示Access进度条 448 14.4.2 使用ActiveX ProgressBar控件 450 14.5 使用Slider控件在运行阶段设置文本框尺寸 452 14.6 应用Microsoft Rich TextBox控件提供所见即所得的功能 455 14.6.1 ...

    LCDWIKI_GUI.zip

    LCDWIKI_GUI.zip是一个与Arduino相关的压缩包文件,它很可能包含了用于操作或配置LCD显示屏的图形用户界面(GUI)程序。Arduino是一个开源电子原型平台,适用于艺术家、设计师和爱好者,便于他们创建交互式物体或...

Global site tag (gtag.js) - Google Analytics