根据文本文件的未知长度设置进度条值

时间:2011-09-27 18:04:51

标签: java swing progress-bar

我目前有一个程序从文本文件中读取,然后在读取的每一行之后写入数据库,文本文件的大小未确定,有些日子文件可能比其他日期更多或更少。

我已经有一个执行我的功能的摇摆工作者,所以我的进度条工作但是现在我只有setIndeterminatetrue所以用户知道正在做的事情而不是实际的进展。

有没有办法可以在读取每一行后增加进度条,但是不要太早或太晚达到100,最好不要事先读完文本文件。谢谢,牛肉。

5 个答案:

答案 0 :(得分:5)

我会使用File.length()来确定文件大小。然后跟踪读取的字节数以确定进度。

答案 1 :(得分:2)

如果文件大小在您开始阅读之前已知,则可以逐行读取并计算每行后的百分比:计算每行中的字节数并将其除以总字节数(即file.length())。

答案 2 :(得分:1)

并将输出包装到GUI(在您的情况下是Progress的{​​{1}})到JProgressBar,因为您已经远离EDT了,更多的是{{3} }

答案 3 :(得分:1)

使用java.io.File来确定文件大小很容易,所以这里的问题是获得实际读取的大小(以字节为单位)的简单进度条可以想到两种可能性:

  1. 估计:假设1个字符= 1个字节(或1个字符= 2个字节,如果您的文件是UTF-16,...)。 1字节猜测会让你低估你的实际读取大小,这样你最终会跳过条形码,具体取决于文件中有多少个多字节字符。

  2. 计算:使用文件字符编码将读取的字符重新编码为字节数组,并获取编码数组的长度。

  3. 计数:正如Brendan在下面的评论中所提出的,使用CountingInputStream(在缓冲后按正确顺序)来计算实际读取的字节数。

  4. NR。 2.这个案子对我来说似乎是不必要的开销,所以我想我会坚持Nr。 1或Nr。 3

答案 4 :(得分:0)

您可以在应用中使用此图像:)

circle progress bar