Reputation: 35
I currently have my program reading the first object using BufferedReader but I am unsure how to read more then one object. Here is the code that I have reading from the file:
public Stock getData(){
StringTokenizer row;
Stock aStock = new Stock();
try{
BufferedReader inbuffer = new BufferedReader(new FileReader(fileName));
String inputString;
inputString = inbuffer.readLine();
if(inputString != null){
row = new StringTokenizer(inputString, DELIMTER);
if(row.countTokens() == 4){
aStock.setStockName(row.nextToken());
aStock.setStockQuantity(Integer.parseInt(row.nextToken()));
aStock.setPurchasePrice(Double.parseDouble(row.nextToken()));
aStock.setCurrentPrice(Double.parseDouble(row.nextToken()));
}
}
inbuffer.close();
}
catch(IOException ioe){
JOptionPane.showMessageDialog(null, ioe.getMessage(), "File Read Error", JOptionPane.ERROR);
}
return aStock;
}
The file I am reading from looks like this:
and then the section of code that calls to my bufferedReader looks like this:
public void loadFile(){
StockIO stockRead = new StockIO();
jFileChooser1.showOpenDialog(jPanel3);
File file = jFileChooser1.getSelectedFile();
stockRead.loadFileName(file.getName());
stockArr.add(stockRead.getData());
int index = 0;
if(stockArr.get(index) != null){
DLM.addElement(stockArr.get(0).getStockName());
index ++;
}
listStock.setModel(DLM);
}
So I am trying to get it where my bufferedReader will read and send both lines of code through.Currently if I run this it will send through the "Shawn" line with all object information but I want the "test" line as well. Thank you for your time looking at this.
Upvotes: 0
Views: 239
Reputation: 131
Your code is currently stopping after it reads the first line because there is no loop to continue iterating through your whole file.
You can use a while loop to check if there is a line to read while looping through your lines:
while ((line = inbuffer.readLine()) != null) {
// Process each line
}
import java.util.ArrayList;
public ArrayList<Stock> getData(){
StringTokenizer row;
ArrayList<Stock> stockList = new ArrayList<>();
try{
BufferedReader inbuffer = new BufferedReader(new FileReader(fileName));
String inputString;
Stock aStock;
// inputString = inbuffer.readLine();
while ((line = inbuffer.readLine()) != null){
row = new StringTokenizer(line, DELIMTER);
if(row.countTokens() == 4){
aStock = new Stock();
aStock.setStockName(row.nextToken());
aStock.setStockQuantity(Integer.parseInt(row.nextToken()));
aStock.setPurchasePrice(Double.parseDouble(row.nextToken()));
aStock.setCurrentPrice(Double.parseDouble(row.nextToken()));
stockList.add(aStock);
}
}
inbuffer.close();
}
catch(IOException ioe){
JOptionPane.showMessageDialog(null, ioe.getMessage(), "File Read Error", JOptionPane.ERROR);
}
return stockList;
}
It also looks like you also need to add a loop in your loadFile() method to iterate through all of your stocks.
public void loadFile(){
StockIO stockRead = new StockIO();
jFileChooser1.showOpenDialog(jPanel3);
File file = jFileChooser1.getSelectedFile();
stockRead.loadFileName(file.getName());
// Add all new stocks from getData to stockArr
stockArr.addAll(stockRead.getData());
// int index = 0;
for (int index = 0; index < stockArr.length; index++) {
if(stockArr.get(index) != null){
DLM.addElement(stockArr.get(index).getStockName());
}
}
listStock.setModel(DLM);
}
Upvotes: 1