Java可以使用带进度条的输入流来读取文件,如果读取文件时希望让用户能够看见文件的读取进度,可以使用javax.swing包提供的输入流类ProgressMonitorInputStream,它的构造方法是:
ProgressMonitorInputStream(Component c, String s, InputStream);
该类创建的输入流在读取文件时会弹出一个显示读取进度的进度条,进度条在参数c指定的组件正前方显示;若该参数取null,则在屏幕的正前方显示。用户可以随时单机进度条上的“取消”按钮关闭流的读取操作。
下面给出一个例子,先看效果图:
代码:
import java.awt.BorderLayout;
import java.io.FileInputStream;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ProgressMonitor;
import javax.swing.ProgressMonitorInputStream;
/**
* Java带进度条的输入流
* @author SingleX
*
*/
public class Example12_13 {
public static void main(String[] args) {
byte b[] = new byte[30];
JTextArea text = new JTextArea(20, 20);
JFrame jFrame = new JFrame();
jFrame.setSize(900, 700);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.add(new JScrollPane(text), BorderLayout.CENTER);
jFrame.validate();
try {
FileInputStream input = new FileInputStream("src\\Example12_13.java");
ProgressMonitorInputStream input_progress = new ProgressMonitorInputStream(null, "读取Java文件", input);
ProgressMonitor p = input_progress.getProgressMonitor();// 获取进度条
while (input_progress.read(b) != -1) {
String s= new String(b);
text.append(s);
Thread.sleep(200);//为了能看到进度条,有意延缓0.2s
}
} catch (Exception e) {
// TODO: handle exception
}
}
}