feat: add class FileWriter to append data to file

This commit is contained in:
Ершов Владислав
2026-08-28 22:52:52 +07:00
parent 02e14a987a
commit a65ed01c5c
6 changed files with 121 additions and 21 deletions
@@ -5,5 +5,5 @@ import ru.project.collection.MyList;
public interface DataSource {
MyList<Student> fill(int size);
MyList<Student> create();
}
@@ -9,6 +9,7 @@ import java.nio.file.Paths;
import java.util.stream.Collector;
import ru.project.student.Student;
import ru.project.collection.MyList;
import ru.project.collection.MyLinkedList;
public class FileDataSource implements DataSource{
private String fileName;
@@ -22,16 +23,16 @@ public class FileDataSource implements DataSource{
}
@Override
public MyList<Student> fill(int size) {
Path path = Paths.get(fileName);
public MyList<Student> create() {
Path path = Paths.of(fileName);
try(var lines = Files.lines(path)){
return lines.skip(1)
.limit(size)
return lines
//.skip(1)
.map(e -> StringParser.parseString(e))
.filter(e -> !(e == null))
.collect(Collector.of(MyList::new,
MyList::add,
(left, right) -> left.addAll(right)));
.collect(Collector.of(MyLinkedList::new,
MyLinkedList::add,
(left, right) -> left;
}catch(FileNotFoundException e){
System.out.println("File not found.");
return null;
@@ -0,0 +1,36 @@
package ru.project.datasource;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import ru.project.student.Student;
import ru.project.collection.MyList;
import ru.project.collection.MyLinkedList;
import ru.project.collection.Iterator;
public class FileWriter {
private Path path;
public FileWriter(String absolutePath) {
this.path = Path.of(absolutePath);
}
public void write(MyList<Student> iist){
//int sizeOfCollection = list.size();
try (BufferedWriter writer = Files.newBufferedWriter(
path,
StandardOpenOption.CREATE,
StandardOpenOption.APPEND
)) {
Iterator iterator = list.getIterator();
while (iterator.hasNext()){
writer.write(iterator.next().toFileString());
writer.newLine();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
@@ -3,11 +3,25 @@ package ru.project.datasource;
import java.util.Scanner;
import ru.project.student.Student;
import ru.project.collection.MyList;
import ru.project.collection.MyLinkedList;
public class ManualDataSource implements DataSource{
private int size;
private MyList<StudentBuffer> bufferMyList = new MyLinkedList<>();
public ManualDataSource(int size) {
this.size = size;
}
public boolean setStudent(
int index,
String groupNumber,
double averageGrade,
int recordBookNumber
){}
@Override
public MyList<Student> fill(int size) {
MyList<Student> result = new MyList<>();
public MyList<Student> create() {
MyList<Student> result = new MyLinkedList<>();
String strToParse;
Student student;
Scanner scanner = new Scanner(System.in);
@@ -3,34 +3,46 @@ package ru.project.datasource;
import ru.project.student.Student;
import ru.project.student.StudentBuilder;
import ru.project.collection.MyList;
import ru.project.collection.MyLinkedList;
import java.util.Random;
public class RandomDataSource implements DataSource{
private final String CHARS = "АБВГДЕЖХИКЛМНОПРСТУФХЦЧЩЭЮЯ";
private final int size;
//private final String CHARS = "АБВГДЕЖХИКЛМНОПРСТУФХЦЧЩЭЮЯ";
private int upperBounRecordBookNumber;
public RandomDataSource(int size) {
this.size = size;
}
public void setUpperBounRecordBookNumber(int upperBounRecordBookNumber) {
this.upperBounRecordBookNumber = upperBounRecordBookNumber;
}
private String getRandomGroupNumber(Random random){
StringBuilder buildRes = new StringBuilder(CHARS.charAt(random.nextInt(CHARS.length())));
buildRes.append('-');
buildRes.append(String.format("%03d", random.nextInt(999)));
return buildRes.toString();
char prefix = (char)(random.nextInt(26) + (int)'A')4
String result = prefix + String.format("%02d", random.nextInt(100));
return result;
}
private String getRandomRecordBookNumber(Random random){
/*private String getRandomRecordBookNumber(Random random){
StringBuilder buildRes = new StringBuilder(CHARS.charAt(random.nextInt(CHARS.length())));
buildRes.append(String.format("%08d", random.nextInt(99999999)));
return buildRes.toString();
}
}*/
@Override
public MyList<Student> fill(int size) {
public MyList<Student> create() {
if (upperBounRecordBookNumber < 0)
throw new IllegalException("The upper bound is negative!!!");
Random random = new Random();
MyList<Student> result = new MyList<>();
MyList<Student> result = new MyLinkedList<>();
for (short i = 0; i<size; i++){
result.add(new StudentBuilder()
.setGroupNumber(getRandomGroupNumber(random))
.setAverageGrade(Math.random() * 5.0)
.setRecordBookNumber(getRandomRecordBookNumber(random))
.setRecordBookNumber(random.nextInt(upperBounRecordBookNumber + 1))
.build());
}
return null;
return result;
}
}
@@ -0,0 +1,37 @@
package ru.project.datasource;
public class StudentBuffer {
private String groupNumber;
private double averageGrade;
private int recordBookNumber;
public StudentBuffer(String groupNumber, double averageGrade, Integer recordBookNumber) {
this.groupNumber = groupNumber;
this.averageGrade = averageGrade;
this.recordBookNumber = recordBookNumber;
}
public String getGroupNumber() {
return groupNumber;
}
public void setGroupNumber(String groupNumber) {
this.groupNumber = groupNumber;
}
public double getAverageGrade() {
return averageGrade;
}
public void setAverageGrade(double averageGrade) {
this.averageGrade = averageGrade;
}
public int getRecordBookNumber() {
return recordBookNumber;
}
public void setRecordBookNumber(int recordBookNumber) {
this.recordBookNumber = recordBookNumber;
}
}