如何从文本文件中读取多个对象然后发送到 ArrayList?
How to read multiple objects from a text file and then send to an ArrayList?
我目前让我的程序使用 BufferedReader 读取第一个对象,但我不确定如何读取多个对象。
这是我从文件中读取的代码:
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;
}
我正在读取的文件如下所示:
然后调用我的 bufferedReader 的代码部分如下所示:
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);
}
所以我试图在我的 bufferedReader 将读取和发送两行代码 through.Currently 的地方获取它,如果我 运行 这将通过 "Shawn" 行发送所有对象信息,但我也想要 "test" 行。感谢您花时间查看此内容。
您的代码当前在读取第一行后停止,因为没有循环可以继续遍历整个文件。
您可以使用 while 循环来检查在遍历您的行时是否有要读取的行:
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;
}
看起来您还需要在 loadFile() 方法中添加一个循环来遍历所有股票。
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);
}
我目前让我的程序使用 BufferedReader 读取第一个对象,但我不确定如何读取多个对象。 这是我从文件中读取的代码:
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;
}
我正在读取的文件如下所示:
然后调用我的 bufferedReader 的代码部分如下所示:
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);
}
所以我试图在我的 bufferedReader 将读取和发送两行代码 through.Currently 的地方获取它,如果我 运行 这将通过 "Shawn" 行发送所有对象信息,但我也想要 "test" 行。感谢您花时间查看此内容。
您的代码当前在读取第一行后停止,因为没有循环可以继续遍历整个文件。
您可以使用 while 循环来检查在遍历您的行时是否有要读取的行:
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;
}
看起来您还需要在 loadFile() 方法中添加一个循环来遍历所有股票。
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);
}