Maison  >  Article  >  Java  >  Comment implémenter la barre de progression de la lecture des fichiers Java

Comment implémenter la barre de progression de la lecture des fichiers Java

PHPz
PHPzavant
2023-04-19 23:16:05861parcourir

Capture d'écran en cours d'exécution

Comment implémenter la barre de progression de la lecture des fichiers Java

Code associé

Classe de fichier de lecture

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;
	}
	
	/*
	 * 这里需要设置 ProgressMonitor对象的最小值和最大值。
	 * 当超过最大值时,进度条正好结束。
	 * 需要手动调用 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();
		}
	}
}

Classe de test

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();
	}
}

Brève description

Cet exemple est très simple, c'est-à-dire qu'à chaque fois qu'un fichier est lu, la progression de la barre de progression est mise à jour, comme si vous accumuliez un nombre à partir de 0. Chaque fois que le nombre est mis à jour, la progression de la barre de progression est également mise à jour jusqu'à ce que l'accumulation atteigne la valeur maximale. Il est préférable de le définir proportionnellement ici, sinon la barre de progression peut paraître un peu étrange. Pour les fichiers plus volumineux, vous pouvez également utiliser des fils de discussion pour mettre à jour la progression de temps en temps. Si cela vous intéresse, vous pouvez l'essayer.

Supplémentaire : Veuillez noter que le problème de chemin ici est relatif au chemin actuel. Il est préférable d'utiliser des chemins relatifs pour faciliter la migration du programme. Si vous n'êtes pas sûr, vous pouvez utiliser un chemin absolu, qui est l'adresse exacte de l'intégralité du fichier sur le disque.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer