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

相關(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對象的最小值和最大值。
* 當超過最大值時,進度條正好結(jié)束。
* 需要手動調(diào)用 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 累加一個數(shù),每次數(shù)字更新,進度條的進度也更新,直到累加到最大值為止。這里最好設(shè)置成比例,否則可能進度條會有點奇怪。對于較大的文件,也可以使用線程,每隔一段時間,更新一下進度,這里感興趣的可以嘗試一下。
補充:注意一下,路徑問題,我這里是相對于當前路徑的,最好使用相對路徑,這樣方便程序遷移。如果不太清楚,可以使用絕對路徑,就是整個文件在磁盤中的準確地址。
到此這篇關(guān)于一個簡單的Java文件讀取的進度條的文章就介紹到這了,更多相關(guān)Java文件讀取的進度條內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java利用Tabula實現(xiàn)對PDF內(nèi)表格數(shù)據(jù)提取
Tabula是一個開源工具,用于從PDF文檔中提取表格數(shù)據(jù),下面小編就來和大家詳細介紹一下java如何通過Tabula對PDF文件內(nèi)表格進行數(shù)據(jù)提取吧2023-09-09
Springboot整合minio實現(xiàn)文件服務(wù)的教程詳解
這篇文章主要介紹了Springboot整合minio實現(xiàn)文件服務(wù)的教程,文中的示例代碼講解詳細,對我們的工作或?qū)W習(xí)有一定幫助,需要的可以參考一下2022-06-06
Java 內(nèi)存模型中的happen-before關(guān)系詳解
這篇文章主要為大家介紹了Java 內(nèi)存模型中的happen-before關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
Java-Redis-Redisson分布式鎖的功能使用及實現(xiàn)
這篇文章主要介紹了Java-Redis-Redisson-分布式鎖的功能使用及實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
Java中l(wèi)ist集合為空或為null的區(qū)別說明
這篇文章主要介紹了Java中l(wèi)ist集合為空或為null的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

