Skip to content

Instantly share code, notes, and snippets.

@untainsYD
Created May 22, 2025 06:32
Show Gist options
  • Select an option

  • Save untainsYD/702d8023286b26b3fd8dbe014361640f to your computer and use it in GitHub Desktop.

Select an option

Save untainsYD/702d8023286b26b3fd8dbe014361640f to your computer and use it in GitHub Desktop.
Laboratory 5, Task 1
package lab5.fileio;
import lab3.tram.Hour;
import java.io.*;
/**
* Клас для роботи з трамвайними зупинками через бінарні файли.
* Реалізує операції читання та запису даних у бінарному форматі.
*/
public class TramStopWithBinaryFile extends TramStopWithFile {
private Hour[] hours = new Hour[0];
/**
* Конструктор за замовчуванням
*/
public TramStopWithBinaryFile() {
super();
}
/**
* Конструктор з параметрами
* @param name назва зупинки
* @param routeNumbers номери маршрутів
* @param hours години роботи
*/
public TramStopWithBinaryFile(String name, int[] routeNumbers, Hour[] hours) {
super(name, routeNumbers, hours);
}
@Override
public Hour[] getHours() {
return hours.clone();
}
@Override
public void setHours(Hour[] hours) {
this.hours = (hours != null) ? hours.clone() : new Hour[0];
}
/**
* Читання даних з бінарного файлу
* @param fileName ім'я файлу для читання
* @throws IOException у разі помилки введення-виведення
*/
@Override
public void readFromFile(String fileName) throws IOException {
try (DataInputStream input = new DataInputStream(new FileInputStream(fileName))) {
// Читання назви зупинки
String name = input.readUTF();
setName(name);
// Читання номерів маршрутів
int routesCount = input.readInt();
int[] routes = new int[routesCount];
for (int i = 0; i < routesCount; i++) {
routes[i] = input.readInt();
}
setRouteNumbers(routes);
// Читання годин роботи
int hoursCount = input.readInt();
Hour[] hours = new Hour[hoursCount];
for (int i = 0; i < hoursCount; i++) {
int passengers = input.readInt();
String comment = input.readUTF();
hours[i] = new Hour(passengers, comment);
}
setHours(hours);
}
}
/**
* Запис даних у бінарний файл
* @param fileName ім'я файлу для запису
* @throws IOException у разі помилки введення-виведення
*/
@Override
public void writeToFile(String fileName) throws IOException {
try (DataOutputStream output = new DataOutputStream(new FileOutputStream(fileName))) {
// Запис назви зупинки
output.writeUTF(getName());
// Запис номерів маршрутів
int[] routes = getRouteNumbers();
output.writeInt(routes.length);
for (int route : routes) {
output.writeInt(route);
}
// Запис годин роботи
Hour[] hours = getHours();
output.writeInt(hours.length);
for (Hour hour : hours) {
output.writeInt(hour.getPassengersCount());
output.writeUTF(hour.getComment());
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment