简体   繁体   中英

How to read multiple objects from a text file and then send to an ArrayList?

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.

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);

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM