The program reads from a data file, pulls out substrings
and places them into a string array
. The reader is closed. The data is then reduced and written to an output file. Then the writer is closed. In both of those cases, br.close
and writer.close
, the compiler returns cannot find symbo referring to the br
and writer variables. Noted that the scan.close()
compiles. i don't understand what is wrong here.
import java.util.Scanner;
import java.io.*;
import java.text.NumberFormat;
public class Module10A_Revision1{
public static void main ( String[] args )throws FileNotFoundException{
String dataPoint;
String[][] data;
String[][] compressedData = new String[56][5];
int totalDataPoints = 0;
int count = 0;
int state = 0;
int total = 0;
int children = 0;
int poverty = 0;
int tempState = 0;
int tempTotal = 0;
int tempChildren = 0;
int tempPoverty = 0;
//MEASURE SIZE FOR ARRAY
File file = new File("data.txt");
Scanner scan = new Scanner(file);
//Determine the total number of items listed in the file
while (scan.hasNextLine()){
scan.nextLine();
totalDataPoints++;
}
scan.close(); (COMPILER HAS NO ISSUES WITH THIS ONE. BUT 2 BELOW FAIL.)
data = new String[totalDataPoints][6];
//READ
try{
FileInputStream fstream = new FileInputStream("data.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
//equate a substring to a temp variable
while ((dataPoint = br.readLine()) != null){
String stateCode = dataPoint.substring(1,2);
String districtID = dataPoint.substring(4,8);
String districtName = dataPoint.substring(10,81);
String totalPop = dataPoint.substring(83,90);
String childrenPop = dataPoint.substring(92,99);
String povertyPop = dataPoint.substring(101,108);
//read into array
data[count][0] = stateCode;
data[count][1] = districtID;
data[count][2] = districtName;
data[count][3] = totalPop;
data[count][4] = childrenPop;
data[count][5] = povertyPop;
count++;
}//end while
}//end try
catch (Exception e){
e.printStackTrace();
}//end catch
br.close();
(br
is one of the two variables the compiler cannot find)
//PROCESS DATA
for (int j = 0; j < 56; j++){
state = 0;
total = 0;
children = 0;
poverty = 0;
for (int i = 0; i < totalDataPoints; i++){
tempState = Integer.parseInt(data[i][0]);
tempTotal = Integer.parseInt(data[i][3]);
tempChildren = Integer.parseInt(data[i][4]);
tempPoverty = Integer.parseInt(data[i][5]);
if (i == tempState){
total = total + tempTotal;
children = children + tempChildren;
poverty = poverty + tempPoverty;
}
else{
break;
} // end if
}//end for j
NumberFormat defaultFormat = NumberFormat.getPercentInstance();
defaultFormat.setMinimumFractionDigits(2);
double perCent = 100*poverty/children;
//perCent = defaultFormat.format(perCent);
compressedData[j][0] = Integer.toString(tempState);
compressedData[j][1] = Integer.toString(total);
compressedData[j][2] = Integer.toString(children);
compressedData[j][3] = Integer.toString(poverty);
compressedData[j][4] = Double.toString(perCent);
}//end for i
//create buffer for writing string
//BufferedWriter writer = new BufferedWriter(new FileWriter("compressedData.txt"));
//WRITE
try{
FileWriter writer = new FileWriter("compressedData.txt");
// Loop over the elements in the string array and write each line.
for(int i = 0; i < 56; i++){
for(int j = 0; j < 5; j++){
writer.append(compressedData[i][j]);
if(j < compressedData[j].length - 1)
writer.append(',');
else
writer.append('\n');
}// end j
}//end i
}//end try
catch(IOException e){
e.printStackTrace();
} //end catch
finally{
writer.close(); ( writer IS THE OTHER VARIABLE THE COMPILER CANNOT FIND)
}//end finally
}//end main
}//end class