Skip to content

File io development #48

Merged
merged 3 commits into from
May 18, 2026
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions src/main/java/millions/controller/GameController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import millions.controller.fileIO.CSVStockFileParser;

import millions.controller.fileIO.CSV.CSVFileHandler;
import millions.controller.fileIO.InvalidFormatException;
import millions.controller.fileIO.StockFileReader;
import millions.model.Exchange;
import millions.model.Player;
import millions.model.Stock;
Expand All @@ -23,11 +23,8 @@ public void startGame(
throw new IllegalArgumentException("Pre run weeks cannot be negative");
}
try {
StockFileReader reader = new StockFileReader(stockFilePath);
List<String> lines = reader.readFile();
CSVStockFileParser parser = new CSVStockFileParser(lines);

List<Stock> stocks = parser.parse();
CSVFileHandler fileHandler = new CSVFileHandler();
List<Stock> stocks = fileHandler.getStocksFromFile(stockFilePath);

exchange = new Exchange("Exchange", stocks);
for (int i = 0; i < preRunWeeks; i++) {
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/millions/controller/fileIO/CSV/CSVFileHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package millions.controller.fileIO.CSV;

import millions.controller.fileIO.InvalidFormatException;
import millions.controller.fileIO.StockFileReader;
import millions.model.Stock;

import java.nio.file.Path;
import java.util.List;

public class CSVFileHandler {
StockFileReader reader;
CSVStockFileParser parser;

public CSVFileHandler() {
this.reader = new StockFileReader();
this.parser = new CSVStockFileParser();
}

public List<Stock> getStocksFromFile(Path filePath) {
try {
StockFileReader reader = new StockFileReader();
List<String> lines = reader.readFile(filePath);

CSVStockFileParser parser = new CSVStockFileParser();
return parser.parse(lines);

} catch (InvalidFormatException e) {
throw new InvalidFormatException(e.getMessage());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
package millions.controller.fileIO;
package millions.controller.fileIO.CSV;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import millions.controller.fileIO.InvalidFormatException;
import millions.model.Stock;

/** Parses CSV lines into Stock objects. */
public class CSVStockFileParser {
private List<String> lines;

public CSVStockFileParser(List<String> lines) {
if (verifyCSV(lines)) {
this.lines = lines;
} else {
throw new InvalidFormatException("Incorrect format for CSV File");
}
}
public CSVStockFileParser() {}

// returns true if all entries have exactly 3 data points
public boolean verifyCSV(List<String> lines) {
Expand All @@ -24,18 +19,22 @@ public boolean verifyCSV(List<String> lines) {
.noneMatch(l -> l.split(",").length != 3);
}

public List<Stock> parse() {
public List<Stock> parse(List<String> lines) {
List<Stock> stocks = new ArrayList<>();
lines.stream()
.filter(l -> !((l.startsWith("#") || l.isBlank())))
.forEach(
l -> {
String[] split = l.split(",");
String symbol = split[0];
String company = split[1];
BigDecimal price = new BigDecimal(split[2]);
stocks.add(new Stock(symbol, company, price));
});
if (verifyCSV(lines)) {
lines.stream()
.filter(l -> !((l.startsWith("#") || l.isBlank())))
.forEach(
l -> {
String[] split = l.split(",");
String symbol = split[0];
String company = split[1];
BigDecimal price = new BigDecimal(split[2]);
stocks.add(new Stock(symbol, company, price));
});
} else {
throw new InvalidFormatException("Incorrect format for CSV File");
}
return stocks;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package millions.controller.fileIO;
package millions.controller.fileIO.CSV;

import millions.controller.fileIO.StockFileWriter;
import millions.model.Stock;

import java.io.BufferedWriter;
Expand Down
9 changes: 3 additions & 6 deletions src/main/java/millions/controller/fileIO/StockFileReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,11 @@
* Reads a file and returns its lines as a list of strings.
*/
public class StockFileReader {
private final Path filePath;

public StockFileReader(Path path) {
this.filePath = path;
}
public StockFileReader() {}

public List<String> readFile() {
File file = new File(filePath.toString());
public List<String> readFile(Path path) {
File file = new File(path.toString());
List<String> lines = new ArrayList<>();
try (Reader reader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(reader)) {
Expand Down
9 changes: 3 additions & 6 deletions src/test/java/millions/CSVStockFileParserTest.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package millions;

import millions.controller.fileIO.CSVStockFileParser;
import millions.controller.fileIO.StockFileReader;
import millions.controller.fileIO.CSV.CSVStockFileParser;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import java.sql.Array;
import java.util.ArrayList;
import java.util.List;


Expand All @@ -30,7 +27,7 @@ public static void setUpTestFile() throws Exception {
public void parseStockFileTest(){
List<String> testList = List.of(exampleString.split("\n"));

CSVStockFileParser parser = new CSVStockFileParser(testList);
assertEquals(3, parser.parse().size());
CSVStockFileParser parser = new CSVStockFileParser();
assertEquals(3, parser.parse(testList).size());
}
}
6 changes: 3 additions & 3 deletions src/test/java/millions/CSVStockFileWriterTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package millions;

import millions.controller.fileIO.CSVStockFileWriter;
import millions.controller.fileIO.CSV.CSVStockFileWriter;
import millions.controller.fileIO.StockFileReader;
import millions.model.Stock;

Expand Down Expand Up @@ -37,7 +37,7 @@ public void testWrite() {
CSVStockFileWriter csvStockFileWriter = new CSVStockFileWriter(stocks);
csvStockFileWriter.write(tempDir.resolve("stocks.csv"));

StockFileReader stockFileReader = new StockFileReader(tempDir.resolve("stocks.csv"));
assertEquals(3, stockFileReader.readFile().size());
StockFileReader stockFileReader = new StockFileReader();
assertEquals(3, stockFileReader.readFile(tempDir.resolve("stocks.csv")).size());
}
}
4 changes: 2 additions & 2 deletions src/test/java/millions/StockFileReaderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static void setUpTestFile() throws Exception {

@Test
public void testReadStockFile() {
StockFileReader stockFileReader = new StockFileReader(sharedFile);
assertEquals(6, stockFileReader.readFile().size());
StockFileReader stockFileReader = new StockFileReader();
assertEquals(6, stockFileReader.readFile(sharedFile).size());
}
}