Java-IO之ProgressMonitorInputStream
2016-07-16 14:51
363 查看
监视读取某些 InputStream 的进度。大致用以下形式调用此 ProgressMonitor:
这可以创建一个进度监视器,以监视读取输入流的进度。如果需要一段时间,将会弹出 ProgressDialog,以通知用户。如果用户单击 Cancel 按钮,则在进行下一次读取操作时会抛出 InterruptedIOException。当关闭流时,会执行所有的正确清除。
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); } }
相关文章推荐
- java中创建解析json
- Eclipse调试Java的10个技巧
- Ubuntu jdk
- 源码分析-java-Iterator接口和Iterable<T>接口
- Eclipse Dynamic web项目 user library 不能同步到 lib 目录
- java多线程
- 很简单的Java断点续传实现原理
- JAVA设计模式---装饰者模式
- java集合类之List
- java基础
- 总结Java常用到的六个加密技术和代码
- Java 抽象类的详解
- Java语言——构造方法及this关键字
- Java IO中转换流的作用
- JavaWeb项目使用SQLite数据库,数据文件相对路径
- java线程详解
- eclipse构建maven web项目
- 利用RxJava加载图片
- java poi读取excel文件内容
- 成为java高手的八大条件