ЛР3. Задание 2

This commit is contained in:
Victor 2013-11-11 17:06:18 +02:00
parent b784617677
commit 8d2d9f7ac3
3 changed files with 117 additions and 7 deletions

View File

@ -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;

View File

@ -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();
}

View File

@ -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,7 +46,9 @@ public class LR_3_Tasks {
public void task2() {
makeObjects();
boolean needCreateCSV = false;
ArrayList<Ellipse> ellipses = new ArrayList<>();
if (needCreateCSV) {
ellipses.add(ellipse1);
ellipses.add(ellipse2);
ellipses.add(ellipse3);
@ -51,6 +57,32 @@ public class LR_3_Tasks {
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() {
makeObjects();
}
@ -96,10 +128,79 @@ public class LR_3_Tasks {
return object;
}
private void writeToCSV(String filename, List<Ellipse> 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<Ellipse> readFromCSV(String filename) throws IOException {
List<Ellipse> 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<Ellipse> 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()) );
}
}