您的位置:首页 > 编程语言 > Java开发

Java-IO之ProgressMonitorInputStream

2016-07-16 14:51 363 查看
监视读取某些 InputStream 的进度。大致用以下形式调用此 ProgressMonitor:

InputStream in = new BufferedInputStream(
new ProgressMonitorInputStream(
parentComponent,
"Reading " + fileName,
new FileInputStream(fileName)));


这可以创建一个进度监视器,以监视读取输入流的进度。如果需要一段时间,将会弹出 ProgressDialog,以通知用户。如果用户单击 Cancel 按钮,则在进行下一次读取操作时会抛出 InterruptedIOException。当关闭流时,会执行所有的正确清除。

example

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.swing.JPanel;
import javax.swing.ProgressMonitorInputStream;

public class ProgressMonitorIO extends JPanel {
private static String fileName = "D:\\英雄时刻\\a.avi";

public ProgressMonitorIO() throws Exception {
Monitor();
}

public void Monitor() throws Exception {
InputStream in = new BufferedInputStream(
new ProgressMonitorInputStream(this, "Reading " + fileName,
new FileInputStream(fileName)));
byte[] b = new byte[1024 * 500];
int len = 0;
while ((len = in.read(b)) != -1) {
System.out.println("读取了[" + len + "]个字节");
//          Thread.sleep(1000);
}
}
public static void main(String[] args) throws Exception {
new ProgressMonitorIO();
}
}


example2

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ProgressMonitorInputStream;

public class TextFrame extends JFrame {

private JMenuBar jMenuBar1 = new JMenuBar();
private JMenu jMenu1 = new JMenu();
private JMenuItem jMenuItem1 = new JMenuItem();
private JMenuItem jMenuItem2 = new JMenuItem();
private JScrollPane jScrollPane1 = new JScrollPane();
private JTextArea textArea = new JTextArea();

public TextFrame() {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}

}

private void jbInit() throws Exception {
this.getContentPane().setLayout(null);
this.setSize(new Dimension(400, 301));
this.setJMenuBar(jMenuBar1);
jMenu1.setText("File");
jMenu1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jMenuItem1_actionPerformed(e);
}
});
jMenuItem1.setText("Exit");
jMenuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jMenuItem1_actionPerformed(e);
}
});
jMenuItem2.setText("Open");
jMenuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jMenuItem2_actionPerformed(e);
}
});
jScrollPane1.setBounds(new Rectangle(140, 35, 2, 2));
textArea.setBounds(new Rectangle(15, 5, 365, 210));

jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenuBar1.add(jMenu1);
this.getContentPane().add(textArea, null);
this.getContentPane().add(jScrollPane1, null);

}

private void jMenuItem1_actionPerformed(ActionEvent e) {
System.exit(0);
}

public void openFile() throws IOException {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
String fname = f.getName().toLowerCase();
return fname.endsWith(".txt") || f.isDirectory();
}

public String getDescription() {
return "Text Files";
}
});

int r = chooser.showOpenDialog(this);
if (r != JFileChooser.APPROVE_OPTION)
return;
final File f = chooser.getSelectedFile();

// set up stream and reader filter sequence

FileInputStream fileIn = new FileInputStream(f);
ProgressMonitorInputStream progressIn = new ProgressMonitorInputStream(
this, "Reading " + f.getName(), fileIn);
final BufferedReader in = new BufferedReader(new InputStreamReader(
(progressIn)));

// the monitored activity must be in a new thread.

Runnable readRunnable = new Runnable() {
public void run() {
textArea = new JTextArea();
try {
String line = in.readLine();

while (line != null) {

textArea.append(line);
textArea.append("/n");
line = in.readLine();
}

in.close();
} catch (IOException ioe) {
}
// set content pane in the event dispatch thread
EventQueue.invokeLater(new Runnable() {
public void run() {
setContentPane(new JScrollPane(textArea));
validate();
}
});

}
};

Thread readThread = new Thread(readRunnable);
readThread.start();
}

private void jMenuItem2_actionPerformed(ActionEvent e) {
try {
openFile();
} catch (IOException exception) {
exception.printStackTrace();
}
}

public static void main(String[] args) {
JFrame frame = new TextFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: