From 8d2d9f7ac310fc5ba4f1985a69f8cd2e74273022 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 11 Nov 2013 17:06:18 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A03.=20=D0=97=D0=B0=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tse/LR_3.java | 1 + src/tse/lr2/Ellipse.java | 8 +++ src/tse/lr3/LR_3_Tasks.java | 115 +++++++++++++++++++++++++++++++++--- 3 files changed, 117 insertions(+), 7 deletions(-) diff --git a/src/tse/LR_3.java b/src/tse/LR_3.java index 348ac1b..adda019 100644 --- a/src/tse/LR_3.java +++ b/src/tse/LR_3.java @@ -22,6 +22,7 @@ public class LR_3 implements ILabRab { LR_3_Tasks.getInstance().task1(); break; case 1: + LR_3_Tasks.getInstance().task2(); break; case 2: break; diff --git a/src/tse/lr2/Ellipse.java b/src/tse/lr2/Ellipse.java index 01de9f1..5e735f7 100644 --- a/src/tse/lr2/Ellipse.java +++ b/src/tse/lr2/Ellipse.java @@ -29,6 +29,14 @@ public class Ellipse implements Serializable { points = Arrays.copyOf(ellipse.points, POINTS); } + public Point[] getPoints() { + return points; + } + + public void setPoint(int index, Point point) { + points[index] = point; + } + public static Point getCenterPoint(Ellipse ellipse) { return ellipse.getCenterPoint(); } diff --git a/src/tse/lr3/LR_3_Tasks.java b/src/tse/lr3/LR_3_Tasks.java index 05be177..e1380aa 100644 --- a/src/tse/lr3/LR_3_Tasks.java +++ b/src/tse/lr3/LR_3_Tasks.java @@ -2,11 +2,15 @@ package tse.lr3; import tse.lr2.*; import java.awt.Point; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.List; @@ -42,13 +46,41 @@ public class LR_3_Tasks { public void task2() { makeObjects(); + boolean needCreateCSV = false; ArrayList ellipses = new ArrayList<>(); - ellipses.add(ellipse1); - ellipses.add(ellipse2); - ellipses.add(ellipse3); - ellipses.add(circle1); - ellipses.add(circle2); - printList(ellipses); + if (needCreateCSV) { + ellipses.add(ellipse1); + ellipses.add(ellipse2); + ellipses.add(ellipse3); + ellipses.add(circle1); + ellipses.add(circle2); + printList(ellipses); + } + + try { + // Создаём при необходимости CSV-файл. + if (needCreateCSV) { + writeToCSV("ellipses.csv", ellipses); + ellipses = null; + } + + // Читаем список из CSV + ellipses = (ArrayList) readFromCSV("ellipses.csv"); + System.out.println("Прочитано из csv"); + printList(ellipses); + + // Сериализуем список в бинарный файл + serialize("t2_list.ser", ellipses); + ellipses = null; + + // Десериализуем список из файла + ellipses = (ArrayList) deserialize("t2_list.ser"); + System.out.println("Десериализовано из бинарного файла"); + printList(ellipses); + System.out.println("Готово"); + } catch (IOException ex) { + ex.printStackTrace(); + } } public void task5() { @@ -96,10 +128,79 @@ public class LR_3_Tasks { return object; } + private void writeToCSV(String filename, List list) throws IOException { + BufferedWriter writer = new BufferedWriter( + new OutputStreamWriter(new FileOutputStream(filename), "UTF-8") + ); + writer.write("Класс,X1,Y1,X2,Y2,X3,Y3,X4,Y4"); + for (Ellipse ellipse : list) { + writer.newLine(); + writeCsvLine(writer, ellipse); + } + writer.flush(); + writer.close(); + } + + private void writeCsvLine(BufferedWriter writer, Ellipse ellipse) throws IOException { + final String SEPARATOR = ","; + writer.write(ellipse.getClass().getName()); + Point[] points = ellipse.getPoints(); + for (Point point : points) { + writer.write(SEPARATOR); + writer.write(String.valueOf(point.x)); + writer.write(SEPARATOR); + writer.write(String.valueOf(point.y)); + } + } + + private List readFromCSV(String filename) throws IOException { + List list = new ArrayList<>(); + BufferedReader reader = new BufferedReader( + new InputStreamReader( new FileInputStream(filename), "UTF-8" ) + ); + reader.readLine(); // Класс,X1,Y1,X2,Y2,X3,Y3,X4,Y4 + String line; + while ( (line = reader.readLine()) != null ) { + Ellipse ellipse = null; + try { + ellipse = readFromCsvLine(line); + } catch (RuntimeException ex) { + System.out.println(ex.toString()); + } + if (ellipse != null) list.add(ellipse); + } + reader.close(); + return list; + } + + private Ellipse readFromCsvLine(String line) { + final int POINTS_COUNT = 4; + if (line.isEmpty()) throw new RuntimeException("Пустая строка"); + String[] params = line.split(","); + if (params.length < 9) throw new RuntimeException("Неверное количество параметров"); + + final int[] coords = new int[POINTS_COUNT * 2]; + for (int i = 0; i < coords.length; i++) { + coords[i] = Integer.parseInt(params[i + 1]); + } + + Ellipse out; + if (params[0].equalsIgnoreCase(Circle.class.getName())) { + out = new Circle(); + } else { + out = new Ellipse(); + } + for (int i = 0; i < POINTS_COUNT; i++) { + out.setPoint(i, new Point(coords[i * 2], coords[i * 2 + 1])); + } + return out; + } + private void printList(List list) { for (int i = 0; i < list.size(); i++) { Ellipse ellipse = list.get(i); - System.out.println( String.format("%2d. %f", i + 1, ellipse.getSquare()) ); + System.out.println( String.format("%2d. %s: Площадь %f\n", i + 1, + ellipse.getClass().getName(), ellipse.getSquare()) ); } }