使用NIO对文件进行底层拷贝(按照字节)多线程技术初级应用 不阻塞程序运行

package com.lovo.homework01;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.nio.ByteBuffer;

import java.nio.channels.FileChannel;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JProgressBar;

import javax.swing.JTextField;

/**

* 类:文件拷贝

* @author Abe

* NIO应用,JProgressBar应用

*/

@SuppressWarnings("serial")

public class NIOTest extends JFrame {

private JProgressBar jbar = null;

private int totleSize = 0;

private int copyedSize = 0;

private int eachSize = 0;

private JButton startButton = null;

private JTextField inField = null, outField = null;

/**

* 构造器

*/

public NIOTest() {

this.setSize(400, 300);

this.setResizable(false);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

this.setLayout(null);

/**

* JProgressBar设置

*/

jbar = new JProgressBar();

jbar.setMinimum(0);

jbar.setMaximum(100);//显示上下限

jbar.setValue(0);//初始值

jbar.setStringPainted(true);//显示百分比

jbar.setBounds(50, 150, 300, 30);

/**

* 文字输入框

*/

inField = new JTextField();

inField.setBounds(50, 50, 300, 30);

outField = new JTextField();

outField.setBounds(50, 100, 300, 30);

/**

* 拷贝开始按钮

*/

startButton = new JButton("开始拷贝");

startButton.setBounds(150, 200, 100, 30);

/**

* 按钮加监听器,匿名内部类就地实例化

*/

startButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

startButton.setEnabled(false);

/**

* 多线程技术 新建一个线程 就地实例化Runnable接口

*/

new Thread(new Runnable() {

@Override

public void run() {

//新建输入输出流 这里用Filexxxxxx 是因为NIO的方法他们才能用

FileInputStream in = null;

FileOutputStream out = null;

try {

in = new FileInputStream(inField.getText());

out = new FileOutputStream(outField.getText());

//NIO 专属 传输通道

FileChannel fcin = in.getChannel();

FileChannel fout = out.getChannel();

totleSize = in.available();

//NIO 专属 运输小车

ByteBuffer buffer = ByteBuffer.allocate(4096);

while ((eachSize = fcin.read(buffer)) != -1) {

//指针回零 然后开始读取数据 直到内容末尾

buffer.flip();

fout.write(buffer);

//清空小车

buffer.clear();

//设置 进度条显示内容

copyedSize += eachSize;

jbar.setValue((int) (100.0 * copyedSize / totleSize));

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

//关闭输入和输出流

if (in != null) {

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (out != null) {

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}).start();//千万不要忘了 新建的线程 用这个开始运行

}

});

this.add(inField);

this.add(outField);

this.add(startButton);

this.add(jbar);

}

/**

* main方法 设置窗口可见

* @param args

*/

public static void main(String[] args) {

new NIOTest().setVisible(true);

}

}

java的流传输的进度条_JAVA程序设计(17)----- 制作文件拷贝软件 进程 输入流输出流 NIO 进度条 底层拷贝 多线程...相关推荐

  1. java 下载文件 进度条_java – 从服务器下载文件时显示进度条

    如果我很了解你,你想显示一个进度条,直到你的服务器准备好发送一个文件,而不是显示蜜蜂下载的文件的进度. 如果是这样,你正在处理艰难的练习.一个可靠的进度条需要知道(相当准确)你在做什么以及需要多长时间 ...

  2. java ftp 上传文件 进度条_java FTP上传文件(进度条显示进度)

    java实现FTP上传有2种方式,一种是org.apache.commons.net.ftp.FTPClient这个jar包,一种是sun.net.ftp.FtpClient.不知道为什么,在使用前一 ...

  3. java字符流和字节流的区别_java字符流与字节流的区别是什么

    java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...

  4. java 对象流传输socket_Java Socket(二)使用TCP传输对象

    在Java Socket使用TCP的基础上,通过ObjectInputStream和ObjectOutputStream来读写对象. //传输的对象,需要序列化 package socket; imp ...

  5. Java的流读一行丢一行_java – 在少数特定情况下记录丢失的消息

    我正在使用 java.util.logging来完成我的应用程序的所有日志记录. 直到最近,我在没有任何特定配置的情况下使用日志工具.一切都按预期工作,所有日志都在控制台中可见(stderr) 现在, ...

  6. html video 设置进度条不可拖动_PHP大文件切割上传并带上进度条功能,不妨一试...

    文章来自:脚本之家链接:https://www.jb51.net/article/164316.htm 作者:hhmp 商务合作:请加微信(QQ):2230304070 资源教程分享 码农网-技术教程 ...

  7. java 麻将的发牌与洗牌_JAVA程序设计(11)-----面对对象初级设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样...

    zzzzZZZZ 1.开始还想贴图的 实在太懒了-- 这是一张麻将 package com.lovo; import java.awt.Graphics; import java.awt.Image; ...

  8. java实验指导书(实验四)答案_java程序设计实验指导书答案

    ? 狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的.狗通常的时候和人 打招呼会通过"摇摇尾巴",在被抚摸感到舒服的时候,会"旺旺叫",而在受到惊吓情 ...

  9. java读取excel数据的方法是_java怎么读取excel文件里的数据

    展开全部 下面是一个简单的读取例子,如果报"java.io.IOException: Invalid header signature; read 4503608217567241, exp ...

最新文章

  1. 练习题 James and Dominoes
  2. opencv 采用 matplot 显示图片
  3. 2020年电大c语言程序设计作业1答案,2019年最新电大C语言程序设计作业答案.doc
  4. Python学习笔记:线程和进程(合),分布式进程
  5. golang beego安装及入门示例
  6. Ubuntu安装Navicat正版永久使用方法
  7. 测试邮件系统需要做的准备工作
  8. BZOJ2330 SCOI2011糖果
  9. (进阶篇)Redis6.2.0 集群 主从复制_原理剖析_02
  10. 使用静态工厂方法而不是构造器
  11. 【A】超全!深度学习在计算机视觉领域的应用一览
  12. JDK自带工具keytool的使用
  13. 鸟哥的Linux私房菜知识点总结(持续更新中)
  14. 统计学(第七版 贾俊平)第七章 期末复习笔记(详细 附例题详解及公式)
  15. 安全站点导航(感谢backlion整理)
  16. mysql 分组去重只保留最新创建时间的数据
  17. kubernetes(k8s)全面介绍
  18. DRF框架及APIView
  19. flow hive 新型蜂箱_流动的蜂蜜盛宴:Flow Hive蜂箱获数百万美元众筹款
  20. Linux基础,系统概叙与虚拟机搭建+CentOS系统安装(建议收藏)

热门文章

  1. 数字图像处理总结(冈萨雷斯版)
  2. Libcurl安装与HelloWorld
  3. 大数据技术Hbase 和 Hive 详解
  4. 微服务架构设计模式~交互方式
  5. mysql max字符串数值_针对字符串值的mysql:min()和max()。
  6. Guice之Servlet基础
  7. 现代软件工程 学生阅读和调查作业
  8. linux 修改网卡报错xe,centos修改端口出现Failed to start OpenSSH server daemon 启动报错和-xe报错的解决方法...
  9. javascript实现图片轮播_第2章 第9节 JavaScript(四)
  10. JAVA进阶教学之(一维数组)