欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一個(gè)簡(jiǎn)單的Java文件讀取的進(jìn)度條

 更新時(shí)間:2023年04月06日 11:53:55   作者:CrazyDragon_King  
這篇文章主要介紹了一個(gè)簡(jiǎn)單的Java文件讀取的進(jìn)度條,寫一個(gè)可以使用的?demo,涉及到了文件的相對(duì)路徑問(wè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)文章

最新評(píng)論