0

I am trying to find the best way to update a Progress Bar while reading in records from a text file stored on internal storage. In my activity fragment I use a button to load a progress dialog with a progress bar to be updated.

The problem is if a the text file has over 2000+ records (1 record per line) should I count the number of lines in the text file prior to loading the records, and use this value to estimate the percentage complete for the Progress Bar? or Is there a more elegant way of doing this?

tshepang
  • 12,111
  • 21
  • 91
  • 136
iron3rd
  • 49
  • 2
  • 6

3 Answers3

0

The accuracy for the progress bar isn't critical, and it's more important to be responsive. I'd just grab the file's size and update the progress bar as bytes read/file size. Reading the entire file to figure out its record count could be prohibitively expensive, and it won't gain you much.

chrylis -cautiouslyoptimistic-
  • 75,269
  • 21
  • 115
  • 152
0

If you want to know the size (in terms of lines) of the file, and it has no more lines that Long.MAX_VALUE (which is 9223372036854775807), you can use this method:

LineNumberReader  lnr = new LineNumberReader(new FileReader(new File("File1")));  
lnr.skip(Long.MAX_VALUE);  
System.out.println(lnr.getLineNumber());

(Extracted from: Number of lines in a file in Java)

Community
  • 1
  • 1
nsL
  • 3,722
  • 3
  • 23
  • 40
0

What about using the file size and counting the number of bytes you read each time?

int sizeInBytes = file.length();
int currentBytes = 0;

//READ A LINE
currentBytes += line.length();
updateProgress((currentBytes/sizeInBytes)*100);
LuigiPower
  • 1,113
  • 10
  • 20