一個(gè)簡(jiǎn)單的Java文件讀取的進(jìn)度條
Java 文件讀取的進(jìn)度條
最近在做一個(gè)小的軟件,想使用一下文件讀取的進(jìn)度條,發(fā)現(xiàn)書上有一個(gè)例子,但是運(yùn)行之后發(fā)現(xiàn)無法顯示進(jìn)度條。然后取網(wǎng)上找相關(guān)的demo,但是發(fā)現(xiàn)了很多人直接把那個(gè)書上的錯(cuò)誤代碼放到 CSDN 上面,我估計(jì)他自己也沒有測(cè)試過代碼,而且 書上的代碼,可能不是使用 IDE 開發(fā)的,所以涉及到了文件的相對(duì)路徑問題,也都沒有指出。這是非常誤導(dǎo)人的方法,所以我這里整理一下,寫一個(gè)可以使用的 demo,給大家參考一下。
運(yùn)行截圖

相關(guān)代碼
讀取文件類
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;
}
/*
* 這里需要設(shè)置 ProgressMonitor對(duì)象的最小值和最大值。
* 當(dāng)超過最大值時(shí),進(jìn)度條正好結(jié)束。
* 需要手動(dòng)調(diào)用 setProgress 方法,更新進(jìn)度。
* 更新的方法有很多種,可以自己計(jì)算相對(duì)大小,這里我取一個(gè)簡(jiǎn)單的方法。
* 直接利用文件的大小并進(jìn)行累加。
* */
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);
//此處代碼在控制臺(tái)打印當(dāng)前源文件。
// String s = new String(b);
// System.out.println(s);
Thread.sleep(1000);
sum += progress;
monitor.setProgress(sum);
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
測(cè)試類
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();
}
}
簡(jiǎn)要說明
這個(gè)例子很簡(jiǎn)單,就是每次讀取文件后,更新進(jìn)度條的進(jìn)度,就類似于,從 0 累加一個(gè)數(shù),每次數(shù)字更新,進(jìn)度條的進(jìn)度也更新,直到累加到最大值為止。這里最好設(shè)置成比例,否則可能進(jìn)度條會(huì)有點(diǎn)奇怪。對(duì)于較大的文件,也可以使用線程,每隔一段時(shí)間,更新一下進(jìn)度,這里感興趣的可以嘗試一下。
補(bǔ)充:注意一下,路徑問題,我這里是相對(duì)于當(dāng)前路徑的,最好使用相對(duì)路徑,這樣方便程序遷移。如果不太清楚,可以使用絕對(duì)路徑,就是整個(gè)文件在磁盤中的準(zhǔn)確地址。
到此這篇關(guān)于一個(gè)簡(jiǎn)單的Java文件讀取的進(jìn)度條的文章就介紹到這了,更多相關(guān)Java文件讀取的進(jìn)度條內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決@Async(“taskExecutor“)異步線程報(bào)錯(cuò)問題
這篇文章主要介紹了解決@Async(“taskExecutor“)異步線程報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Java如何避免死鎖和競(jìng)態(tài)條件的實(shí)現(xiàn)
本文主要介紹了Java如何避免死鎖和競(jìng)態(tài)條件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Java實(shí)現(xiàn)監(jiān)聽文件變化的三種方案詳解
這篇文章主要介紹了Java實(shí)現(xiàn)監(jiān)聽文件變化的三種方法,每種方案給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
基于Java實(shí)現(xiàn)楊輝三角 LeetCode Pascal''s Triangle
這篇文章主要介紹了基于Java實(shí)現(xiàn)楊輝三角 LeetCode Pascal's Triangle的相關(guān)資料,需要的朋友可以參考下2016-01-01
詳解關(guān)于Spring Cloud 框架熱部署的方法
本篇文章主要介紹了詳解關(guān)于Spring Cloud 框架熱部署的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
Java中的BaseTypeHandler自定義類型轉(zhuǎn)換器的使用
這篇文章主要介紹了Java中的BaseTypeHandler自定義類型轉(zhuǎn)換器的使用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例
這篇文章主要介紹了常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例,一般來說DSA算法用于簽名的效率會(huì)比RSA要快,需要的朋友可以參考下2016-04-04

