一個(gè)簡(jiǎn)單的Java文件讀取的進(jìn)度條
Java 文件讀取的進(jìn)度條
最近在做一個(gè)小的軟件,想使用一下文件讀取的進(jìn)度條,發(fā)現(xiàn)書上有一個(gè)例子,但是運(yùn)行之后發(fā)現(xiàn)無(wú)法顯示進(jìn)度條。然后取網(wǎng)上找相關(guān)的demo,但是發(fā)現(xiàn)了很多人直接把那個(gè)書上的錯(cuò)誤代碼放到 CSDN 上面,我估計(jì)他自己也沒(méi)有測(cè)試過(guò)代碼,而且 書上的代碼,可能不是使用 IDE 開(kāi)發(fā)的,所以涉及到了文件的相對(duì)路徑問(wèn)題,也都沒(méi)有指出。這是非常誤導(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)超過(guò)最大值時(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)要說(shuō)明
這個(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ǔ)充:注意一下,路徑問(wèn)題,我這里是相對(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è)開(kāi)源工具,用于從PDF文檔中提取表格數(shù)據(jù),下面小編就來(lái)和大家詳細(xì)介紹一下java如何通過(guò)Tabula對(duì)PDF文件內(nèi)表格進(jìn)行數(shù)據(jù)提取吧2023-09-09Springboot整合minio實(shí)現(xiàn)文件服務(wù)的教程詳解
這篇文章主要介紹了Springboot整合minio實(shí)現(xiàn)文件服務(wù)的教程,文中的示例代碼講解詳細(xì),對(duì)我們的工作或?qū)W習(xí)有一定幫助,需要的可以參考一下2022-06-06Java 內(nèi)存模型中的happen-before關(guān)系詳解
這篇文章主要為大家介紹了Java 內(nèi)存模型中的happen-before關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Java-Redis-Redisson分布式鎖的功能使用及實(shí)現(xiàn)
這篇文章主要介紹了Java-Redis-Redisson-分布式鎖的功能使用及實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08Java中l(wèi)ist集合為空或?yàn)閚ull的區(qū)別說(shuō)明
這篇文章主要介紹了Java中l(wèi)ist集合為空或?yàn)閚ull的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11