FULL CODE: package Progessbar;
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import javax.swing.JFrame; import javax.swing.JProgressBar;
/** * * @author AFgame. Homepage: http://afgame.ucoz.com * */ public class Test {
JProgressBar progressBar;
public Test() { JFrame frame = new JFrame(); frame.setVisible(true); //Khỏi tạo một thanh progressbar progressBar = new JProgressBar(); frame.add(progressBar); frame.setSize(400, 50); }
public void copy(File nguon, File dich) throws Exception { FileInputStream fis = new FileInputStream(nguon); FileOutputStream fos = new FileOutputStream(dich); //Set
giá trị lớn nhất cho progressbar, tức là số bytes của file nguồn. Cần
lưu ý trong trường hợp này file nguồn có dung lượng nhỏ (khoảng dưới
2Gb). Trường hợp file nguồn có dung lượng lớn hơn, vì phương thức
setMaximum nhận vào giá trị kiểu int, tức file nguồn quá lơn việc cast
kiểu long về int sẽ bị sai và thanh progressbar của bạn sẽ có giá trị
max là một số âm, điều này sẽ khiến cho quá trình chạy progressbar không
đúng nữa. Bạn cần tính toán đưa giá trị legth của file nguồn về Kb,
hoặc Mb để giá trị max nằm trong khoảng của int. progressBar.setMaximum((int) nguon.length()); int value = 0;//Giá trị mà progessbar sẽ tăng dần lên int read; byte[] buff = new byte[1024];
while ((read = fis.read(buff)) != -1) { fos.write(buff, 0, read); //Sau
mỗi lần wite mãng byte xuống thì bạn cần cập nhật lại cho thanh
progressbar một giá trị mới. Khi value == maximum thì lúc đó tiến trình
copy cung xong và thanh progressbar cũng đầy. progressBar.setValue((value += read)); } fis.close(); fos.close(); System.out.println("Done!"); }
public static void main(String[] args) throws Exception { Test test = new Test(); test.copy(new File("Source.mp4"), new File("Dest.mp4")); } }
|