I'm trying to import text from a text file which has been generated in another Activity
. The generated text file is made up of a String
ArrayList
which only contains numbers and the other random text generated by Android. When I import the text from the file I'm using a BufferedReader
and readLine()
to get each new number into an Integer
ArrayList
. I'm removing any non-numerical values from the text file and the numbers that are generated in the other Activity are split up by an "\n".
The problem that I'm facing is that Android crashes when it loads the Activity
. I've narrowed the cause down to Integer.parseInt()
.
My code is below:
ArrayList<Integer> lines = new ArrayList<Integer>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
File file = new File(getFilesDir(), "test_file.txt");
try {
BufferedReader br = new BufferedReader(new FileReader(file));
while (br.readLine() != null) {
String text = (br.readLine()).replaceAll("[^0-9]+","").trim();
Integer number = Integer.parseInt(text);
lines.add(number);
}
} catch (IOException e) {
}
TextView tv = (TextView) findViewById(R.id.helptext);
int max = 0, min = 100;
double total = 0;
for (int i = 0; i < lines.size(); i++) {
int number = lines.get(i);
max = Math.max(max, number);
min = Math.min(min, number);
total += number;
}
tv.setText("max = " + max + " min = " + min + " total = "
+ total);
Problems:
When you do replaceAll("[^0-9]+","")
you can end up with an empty string causing Integer.parseInt
to throw an NumberFormatException
.
You are skipping every other line (your while
loop condition consumes the first line, the third line and so on...)
while (br.readLine() != null) // consumes one line
Try something like this:
BufferedReader br = new BufferedReader(new FileReader(file));
String input;
while ((input = br.readLine()) != null) {
String text = input.replaceAll("[^0-9]+","");
if (!text.isEmpty())
lines.add(Integer.parseInt(text));
}