我目前有一个程序从文本文件中读取,然后在读取的每一行之后写入数据库,文本文件的大小未确定,有些日子文件可能比其他日期更多或更少。
我已经有一个执行我的功能的摇摆工作者,所以我的进度条工作但是现在我只有setIndeterminate
到true
所以用户知道正在做的事情而不是实际的进展。
有没有办法可以在读取每一行后增加进度条,但是不要太早或太晚达到100,最好不要事先读完文本文件。谢谢,牛肉。
答案 0 :(得分:5)
我会使用File.length()来确定文件大小。然后跟踪读取的字节数以确定进度。
答案 1 :(得分:2)
如果文件大小在您开始阅读之前已知,则可以逐行读取并计算每行后的百分比:计算每行中的字节数并将其除以总字节数(即file.length()
)。
答案 2 :(得分:1)
并将输出包装到GUI(在您的情况下是Progress
的{{1}})到JProgressBar
,因为您已经远离EDT了,更多的是{{3} }
答案 3 :(得分:1)
使用java.io.File
来确定文件大小很容易,所以这里的问题是获得实际读取的大小(以字节为单位)的简单进度条可以想到两种可能性:
估计:假设1个字符= 1个字节(或1个字符= 2个字节,如果您的文件是UTF-16,...)。 1字节猜测会让你低估你的实际读取大小,这样你最终会跳过条形码,具体取决于文件中有多少个多字节字符。
计算:使用文件字符编码将读取的字符重新编码为字节数组,并获取编码数组的长度。
计数:正如Brendan在下面的评论中所提出的,使用CountingInputStream
(在缓冲后按正确顺序)来计算实际读取的字节数。
NR。 2.这个案子对我来说似乎是不必要的开销,所以我想我会坚持Nr。 1或Nr。 3
答案 4 :(得分:0)
您可以在应用中使用此图像:)