读取大文本文档并填写JProgressBar,因为它正在被读取

时间:2018-02-24 19:09:51

标签: java filereader jprogressbar

我正在试图弄清楚如何在正在读取文件时填充JProgressBar。更具体地说,我需要读入2个文件并填充2个JProgressBars,然后在读取其中一个文件后停止。

我无法理解如何使用文件进行工作。使用两个线程,我只需要for(int i = 0; i < 100; i++)循环和setValue(i)来获取当前进度。但是对于文件,我不知道如何设置进度。也许得到文件的大小,并试着用它?我真的不确定,并希望有人可以抛出一两个想法。

谢谢!

未来读者的更新:

我设法通过使用file.length()来解决它,该for(int i = 0; i < fileSize; i++)以字节为单位返回文件大小,然后将条形设置为从0变为该大小而不是常规100,然后使用

{{1}}

要按照它应该加载条形码。

1 个答案:

答案 0 :(得分:1)

ProgressMonitorInputStream的示例用法。如果从InputStream读取更长时间,它会自动显示带有progressbar的简单对话框 - 您可以使用以下命令调整该时间:setMillisToPopup,setMillisToDecideToPopup。

public static void main(String[] args) {
        JFrame mainFrame = new JFrame();
        mainFrame.setSize(640, 480);
        mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        mainFrame.setVisible(true);

        String filename = "Path to your filename"; // replace with real filename
        File file = new File(filename);

        try (FileInputStream inputStream = new FileInputStream(file);
             ProgressMonitorInputStream progressInputStream = new ProgressMonitorInputStream(mainFrame, "Reading file: " + filename, inputStream)) {
            byte[] buffer = new byte[10];   // Make this number bigger - 10240 bytes for example. 10 is there to show how that dialog looks like

            long totalReaded = 0;
            long totalSize = file.length();
            int readed = 0;

            while((readed = progressInputStream.read(buffer)) != -1) {
                totalReaded += readed;
                progressInputStream.getProgressMonitor().setNote(String.format("%d / %d kB", totalReaded / 1024, totalSize / 1024));

             // Do something with data in buffer
            }
        } catch(IOException ex) {
            System.err.println(ex);
        }
    }