파일 클래스 읽는 중
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(); } } }
테스트 클래스
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부터 숫자를 누적하는 것과 유사합니다. 숫자가 업데이트될 때마다 누적값이 최대값에 도달할 때까지 진행률 표시줄의 진행률도 업데이트됩니다. 여기에서는 비례적으로 설정하는 것이 가장 좋습니다. 그렇지 않으면 진행률 표시줄이 조금 이상하게 보일 수 있습니다. 더 큰 파일의 경우 스레드를 사용하여 가끔씩 진행 상황을 업데이트할 수도 있습니다. 여기에 관심이 있다면 시도해 볼 수 있습니다.
Supplement: 여기서 경로 문제는 현재 경로에 상대적이라는 점에 유의하세요. 프로그램 마이그레이션을 용이하게 하려면 상대 경로를 사용하는 것이 가장 좋습니다. 확실하지 않은 경우 디스크에 있는 전체 파일의 정확한 주소인 절대 경로를 사용할 수 있습니다.
위 내용은 Java 파일 읽기 진행률 표시줄을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!