java的流传输的进度条_JAVA程序设计(17)----- 制作文件拷贝软件 进程 输入流输出流 NIO 进度条 底层拷贝 多线程...
使用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 进度条 底层拷贝 多线程...相关推荐
- java 下载文件 进度条_java – 从服务器下载文件时显示进度条
如果我很了解你,你想显示一个进度条,直到你的服务器准备好发送一个文件,而不是显示蜜蜂下载的文件的进度. 如果是这样,你正在处理艰难的练习.一个可靠的进度条需要知道(相当准确)你在做什么以及需要多长时间 ...
- java ftp 上传文件 进度条_java FTP上传文件(进度条显示进度)
java实现FTP上传有2种方式,一种是org.apache.commons.net.ftp.FTPClient这个jar包,一种是sun.net.ftp.FtpClient.不知道为什么,在使用前一 ...
- java字符流和字节流的区别_java字符流与字节流的区别是什么
java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...
- java 对象流传输socket_Java Socket(二)使用TCP传输对象
在Java Socket使用TCP的基础上,通过ObjectInputStream和ObjectOutputStream来读写对象. //传输的对象,需要序列化 package socket; imp ...
- Java的流读一行丢一行_java – 在少数特定情况下记录丢失的消息
我正在使用 java.util.logging来完成我的应用程序的所有日志记录. 直到最近,我在没有任何特定配置的情况下使用日志工具.一切都按预期工作,所有日志都在控制台中可见(stderr) 现在, ...
- html video 设置进度条不可拖动_PHP大文件切割上传并带上进度条功能,不妨一试...
文章来自:脚本之家链接:https://www.jb51.net/article/164316.htm 作者:hhmp 商务合作:请加微信(QQ):2230304070 资源教程分享 码农网-技术教程 ...
- java 麻将的发牌与洗牌_JAVA程序设计(11)-----面对对象初级设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样...
zzzzZZZZ 1.开始还想贴图的 实在太懒了-- 这是一张麻将 package com.lovo; import java.awt.Graphics; import java.awt.Image; ...
- java实验指导书(实验四)答案_java程序设计实验指导书答案
? 狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的.狗通常的时候和人 打招呼会通过"摇摇尾巴",在被抚摸感到舒服的时候,会"旺旺叫",而在受到惊吓情 ...
- java读取excel数据的方法是_java怎么读取excel文件里的数据
展开全部 下面是一个简单的读取例子,如果报"java.io.IOException: Invalid header signature; read 4503608217567241, exp ...
最新文章
- 练习题 James and Dominoes
- opencv 采用 matplot 显示图片
- 2020年电大c语言程序设计作业1答案,2019年最新电大C语言程序设计作业答案.doc
- Python学习笔记:线程和进程(合),分布式进程
- golang beego安装及入门示例
- Ubuntu安装Navicat正版永久使用方法
- 测试邮件系统需要做的准备工作
- BZOJ2330 SCOI2011糖果
- (进阶篇)Redis6.2.0 集群 主从复制_原理剖析_02
- 使用静态工厂方法而不是构造器
- 【A】超全!深度学习在计算机视觉领域的应用一览
- JDK自带工具keytool的使用
- 鸟哥的Linux私房菜知识点总结(持续更新中)
- 统计学(第七版 贾俊平)第七章 期末复习笔记(详细 附例题详解及公式)
- 安全站点导航(感谢backlion整理)
- mysql 分组去重只保留最新创建时间的数据
- kubernetes(k8s)全面介绍
- DRF框架及APIView
- flow hive 新型蜂箱_流动的蜂蜜盛宴:Flow Hive蜂箱获数百万美元众筹款
- Linux基础,系统概叙与虚拟机搭建+CentOS系统安装(建议收藏)
热门文章
- 数字图像处理总结(冈萨雷斯版)
- Libcurl安装与HelloWorld
- 大数据技术Hbase 和 Hive 详解
- 微服务架构设计模式~交互方式
- mysql max字符串数值_针对字符串值的mysql:min()和max()。
- Guice之Servlet基础
- 现代软件工程 学生阅读和调查作业
- linux 修改网卡报错xe,centos修改端口出现Failed to start OpenSSH server daemon 启动报错和-xe报错的解决方法...
- javascript实现图片轮播_第2章 第9节 JavaScript(四)
- JAVA进阶教学之(一维数组)