diff --git a/AppData.java b/AppData.java new file mode 100644 index 0000000..5360801 --- /dev/null +++ b/AppData.java @@ -0,0 +1,83 @@ +package ru.gb.lesson5; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; + +public class AppData implements Serializable { + private final String[] headers; + private final int[][] data; + + public AppData(String[] headers, int[][] data) { + this.headers = headers; + this.data = data; + } + + public AppData(String appData) { + String[] tokens = appData.split("[\\r\n]+"); + this.headers = tokens[0].split(";"); + int[][] data = new int[headers.length - 1][headers.length]; + for (int i = 1; i < tokens.length; i++) { + String[] values = tokens[i].split(";"); + for (int j = 0; j < values.length; j++) { + data[i - 1][j] = Integer.parseInt(values[j]); + } + } + this.data = data; + } + public void writeToFile(String path) { + File file = new File(path); + writeToFile(file); + } + public void writeToFile(File file) { + try (OutputStreamWriter outputStream = new OutputStreamWriter( + new FileOutputStream(file), StandardCharsets.UTF_8)) { + outputStream.write(this.toString()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private String headersToString() { + StringBuilder result = new StringBuilder(); + for (String header : headers) { + result.append(header).append(";"); + } + return result.append("\n").toString().replaceFirst(";$", ""); + } + private String dataToString() { + StringBuilder result = new StringBuilder(); + for (int[] values : data) { + StringBuilder resultBuilder = new StringBuilder(); + for (int value : values) { + resultBuilder.append(value).append(";"); + } + resultBuilder.append("\n"); + result.append(resultBuilder.toString().replaceFirst(";$", "")); + } + return result.append("\n").toString(); + } + + @Override + public String toString() { + return headersToString() + dataToString(); + } + + public static AppData readFromFile(String path) { + File file = new File(path); + return readFromFile(file); + } + public static AppData readFromFile(File file) { + StringBuilder result = new StringBuilder(); + try (InputStreamReader inputStream = new InputStreamReader( + new FileInputStream(file), StandardCharsets.UTF_8)) { + int count; + while ((count = inputStream.read()) != -1) { + result.append((char) count); + } + } catch (IOException e) { + e.printStackTrace(); + } + return new AppData(result.toString()); + } +} diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..b971311 --- /dev/null +++ b/Main.java @@ -0,0 +1,17 @@ +package ru.gb.lesson5; + +public class Main { + public static final String PATH = "src/main/java/ru/gb/lesson5/demo.csv"; + + public static void main(String[] args) { + String[] headers = {"Value 1", "Value 2", "Value 3"}; + int[][] data = { {100, 200, 123}, {300, 400, 500}}; + + AppData appData = new AppData(headers, data); + + appData.writeToFile(PATH); + AppData receivedAppData = AppData.readFromFile(PATH); + System.out.println(receivedAppData); + + } + } \ No newline at end of file diff --git a/demo.csv b/demo.csv new file mode 100644 index 0000000..19af309 --- /dev/null +++ b/demo.csv @@ -0,0 +1,3 @@ +Value 1;Value 2;Value 3 +100;200;123 +300;400;500