一個(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)文章
java利用Tabula實(shí)現(xiàn)對(duì)PDF內(nèi)表格數(shù)據(jù)提取
Tabula是一個(gè)開源工具,用于從PDF文檔中提取表格數(shù)據(jù),下面小編就來和大家詳細(xì)介紹一下java如何通過Tabula對(duì)PDF文件內(nèi)表格進(jìn)行數(shù)據(jù)提取吧2023-09-09
Springboot整合minio實(shí)現(xiàn)文件服務(wù)的教程詳解
這篇文章主要介紹了Springboot整合minio實(shí)現(xiàn)文件服務(wù)的教程,文中的示例代碼講解詳細(xì),對(duì)我們的工作或?qū)W習(xí)有一定幫助,需要的可以參考一下2022-06-06
Java 內(nèi)存模型中的happen-before關(guān)系詳解
這篇文章主要為大家介紹了Java 內(nèi)存模型中的happen-before關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Java-Redis-Redisson分布式鎖的功能使用及實(shí)現(xiàn)
這篇文章主要介紹了Java-Redis-Redisson-分布式鎖的功能使用及實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
Java中l(wèi)ist集合為空或?yàn)閚ull的區(qū)別說明
這篇文章主要介紹了Java中l(wèi)ist集合為空或?yàn)閚ull的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

