一个简单的Java文件读取的进度条

 更新时间:2023年04月06日 11:53:55   作者:CrazyDragon_King  
这篇文章主要介绍了一个简单的Java文件读取的进度条,写一个可以使用的 demo,涉及到了文件的相对路径问题,需要的朋友可以参考下

Java 文件读取的进度条

最近在做一个小的软件,想使用一下文件读取的进度条,发现书上有一个例子,但是运行之后发现无法显示进度条。然后取网上找相关的demo,但是发现了很多人直接把那个书上的错误代码放到 CSDN 上面,我估计他自己也没有测试过代码,而且 书上的代码,可能不是使用 IDE 开发的,所以涉及到了文件的相对路径问题,也都没有指出。这是非常误导人的方法,所以我这里整理一下,写一个可以使用的 demo,给大家参考一下。

运行截图

在这里插入图片描述

相关代码

读取文件类

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.ProgressMonitor;
import javax.swing.ProgressMonitorInputStream;

public class ReadFile{
	private File target, output;
	
	public ReadFile(File target, File output) {
		this.target = target;
		this.output = output;
	}
	
	/*
	 * 这里需要设置 ProgressMonitor对象的最小值和最大值。
	 * 当超过最大值时,进度条正好结束。
	 * 需要手动调用 setProgress 方法,更新进度。
	 * 更新的方法有很多种,可以自己计算相对大小,这里我取一个简单的方法。
	 * 直接利用文件的大小并进行累加。
	 * */
	public void readFile() throws InterruptedException {
		byte[] b = new byte[124];
		try(
			FileInputStream in = new FileInputStream(target);
			FileOutputStream out = new FileOutputStream(output);
			ProgressMonitorInputStream pmi = new ProgressMonitorInputStream(null, "读取", in)) {
			ProgressMonitor monitor = pmi.getProgressMonitor();
			monitor.setMinimum(0);
			monitor.setMaximum((int) (target.length()));
			int progress = 124;
			int sum = 0;
			while (in.read(b) != -1) {
				out.write(b);
			//此处代码在控制台打印当前源文件。
			//	String s = new String(b);
			//	System.out.println(s);
				Thread.sleep(1000);
				sum += progress;
				monitor.setProgress(sum);
			}
		} catch(IOException e) {
			e.printStackTrace();
		}
	}
}

测试类

package test;

import java.io.File;

public class Test {
	public static void main(String[] args) throws InterruptedException {
		ReadFile read = new ReadFile(new File("./src/test/ReadFile.java"), new File("./output.java"));
		read.readFile();
	}
}

简要说明

这个例子很简单,就是每次读取文件后,更新进度条的进度,就类似于,从 0 累加一个数,每次数字更新,进度条的进度也更新,直到累加到最大值为止。这里最好设置成比例,否则可能进度条会有点奇怪。对于较大的文件,也可以使用线程,每隔一段时间,更新一下进度,这里感兴趣的可以尝试一下。

补充:注意一下,路径问题,我这里是相对于当前路径的,最好使用相对路径,这样方便程序迁移。如果不太清楚,可以使用绝对路径,就是整个文件在磁盘中的准确地址。

到此这篇关于一个简单的Java文件读取的进度条的文章就介绍到这了,更多相关Java文件读取的进度条内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单了解Spring Bean常用注解的装配

    简单了解Spring Bean常用注解的装配

    这篇文章主要介绍了简单了解Spring Bean常用注解的装配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 解决@Async(“taskExecutor“)异步线程报错问题

    解决@Async(“taskExecutor“)异步线程报错问题

    这篇文章主要介绍了解决@Async(“taskExecutor“)异步线程报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java如何避免死锁和竞态条件的实现

    Java如何避免死锁和竞态条件的实现

    本文主要介绍了Java如何避免死锁和竞态条件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • mybatis之BaseTypeHandler用法解读

    mybatis之BaseTypeHandler用法解读

    这篇文章主要介绍了mybatis之BaseTypeHandler用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java实现监听文件变化的三种方案详解

    Java实现监听文件变化的三种方案详解

    这篇文章主要介绍了Java实现监听文件变化的三种方法,每种方案给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 基于Java实现杨辉三角 LeetCode Pascal''s Triangle

    基于Java实现杨辉三角 LeetCode Pascal''s Triangle

    这篇文章主要介绍了基于Java实现杨辉三角 LeetCode Pascal's Triangle的相关资料,需要的朋友可以参考下
    2016-01-01
  • 详解关于Spring Cloud 框架热部署的方法

    详解关于Spring Cloud 框架热部署的方法

    本篇文章主要介绍了详解关于Spring Cloud 框架热部署的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java中的BaseTypeHandler自定义类型转换器的使用

    Java中的BaseTypeHandler自定义类型转换器的使用

    这篇文章主要介绍了Java中的BaseTypeHandler自定义类型转换器的使用,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Java基于UDP协议的聊天室功能

    Java基于UDP协议的聊天室功能

    这篇文章主要为大家详细介绍了Java基于UDP协议的聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • 常用数字签名算法RSA与DSA的Java程序内实现示例

    常用数字签名算法RSA与DSA的Java程序内实现示例

    这篇文章主要介绍了常用数字签名算法RSA与DSA的Java程序内实现示例,一般来说DSA算法用于签名的效率会比RSA要快,需要的朋友可以参考下
    2016-04-04

最新评论