diff --git a/src/tse/lr4/NotePad.java b/src/tse/lr4/NotePad.java index 9034194..f14bbe9 100644 --- a/src/tse/lr4/NotePad.java +++ b/src/tse/lr4/NotePad.java @@ -60,14 +60,17 @@ public class NotePad { return getName() + ". " + getDescription(); } - public static NotePad readFromCsvLine(String line) throws ParseException { - if (line.isEmpty()) throw new RuntimeException("Пустая строка"); - String[] params = line.split("\t"); + public static NotePad readFromCsvLine(String[] params) { if (params.length != 4) throw new RuntimeException("Неверное количество параметров"); String name = params[0]; String description = params[1]; - Date data = new SimpleDateFormat(DATE_PATTERN).parse(params[2]); + Date data; + try { + data = new SimpleDateFormat(DATE_PATTERN).parse(params[2]); + } catch (ParseException ex) { + data = new Date(System.currentTimeMillis()); + } boolean important = Boolean.parseBoolean(params[3]); return new NotePad(name, description, data, important); diff --git a/src/tse/lr4/NotePadManager.java b/src/tse/lr4/NotePadManager.java index a295ed3..e121a99 100644 --- a/src/tse/lr4/NotePadManager.java +++ b/src/tse/lr4/NotePadManager.java @@ -1,13 +1,11 @@ package tse.lr4; -import java.io.BufferedReader; +import com.annimon.io.CsvReader; import java.io.BufferedWriter; -import java.io.FileInputStream; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStreamReader; import java.io.OutputStreamWriter; -import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -30,14 +28,14 @@ public class NotePadManager { return instance; } - private ArrayList notepads; + private List notepads; public NotePadManager() { - notepads = (ArrayList) readFromCSV(FILENAME); + notepads = readFromCSV(FILENAME); if (notepads == null) notepads = new ArrayList<>(); } - public ArrayList getNotepads() { + public List getNotepads() { return notepads; } @@ -67,7 +65,7 @@ public class NotePadManager { createNewEntry(name, desc, date, important); } - private void saveToCSV(String filename, ArrayList list) { + private void saveToCSV(String filename, List list) { try { BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(filename), "UTF-8") @@ -84,25 +82,23 @@ public class NotePadManager { } } - private Object readFromCSV(String filename) { - try { - List list = new ArrayList<>(); - BufferedReader reader = new BufferedReader( - new InputStreamReader( new FileInputStream(filename), "UTF-8" ) - ); - reader.readLine(); // Имя,Описание,Дата,Важное - String line; - while ( (line = reader.readLine()) != null ) { - NotePad pad = null; - try { - pad = NotePad.readFromCsvLine(line); - } catch (RuntimeException | ParseException ex) { - System.out.println(ex.toString()); - } - if (pad != null) list.add(pad); + private List readFromCSV(String filename) { + CsvReader csvReader = new CsvReader<>(new File(filename)); + csvReader.setReaderHandler(new CsvReader.ReaderHandler() { + + @Override + public void onStartRead(File file) { } + + @Override + public NotePad createObject(String[] params) { + return NotePad.readFromCsvLine(params); } - reader.close(); - return list; + + @Override + public void onFinishRead(File file) { } + }); + try { + return csvReader.readCsvToList(); } catch (IOException ex) { Util.handleException(ex); } diff --git a/src/tse/lr4/PadPanel.java b/src/tse/lr4/PadPanel.java index 63a1f94..12d5644 100644 --- a/src/tse/lr4/PadPanel.java +++ b/src/tse/lr4/PadPanel.java @@ -3,9 +3,9 @@ package tse.lr4; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.List; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JCheckBox; @@ -199,7 +199,7 @@ public class PadPanel extends JPanel { return NotePadManager.getInstance().getNotepads().get(padIndex); } - private ArrayList getNotepads() { + private List getNotepads() { return NotePadManager.getInstance().getNotepads(); }