Изменение содержимого CSV файла

 
 
 
Сообщения:5
В каждый момент времени окно приложения должно отображать
одну , которая включает:
- название события (текстовое поле);
- подробное описание (многострочное текстовое поле);
- дату, время (текстовые поля);
- флажок «важное».
В окне должны быть кнопки «Следующее», «Предыдущее» для перехода между
событиями.
Должна быть возможность изменения всех атрибутов события. По кнопке «Применить» эти
изменения должны сохраняться в памяти.

Я все это реализовал но как делать изменения в файле

вот код

package sheldue;
 
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class Sheldue {
    public static final String delimiter = ",";
    public static List<String> empList = new ArrayList<>();
    public static int k;
    public static void main(String[] args) throws ParseException {
        Home form = new Home();
        form.setVisible(true);
 
        //Запис у csv файл
        form.acept.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try
                {
                    FileWriter writer = new FileWriter("event_list.csv",true);
                    writer.append(form.event.getText());
                    writer.append(',');
                    String new_s =  (form.descEvent.getText().replace('\n','&'));
                    new_s.replace(',',' ');
                    writer.append(new_s);
                    writer.append(',');
                    writer.append(form.Date.getText());
                    writer.append(',');
                    writer.append(form.Time.getText());
                    writer.append(',');
                    if(form.vaz.isSelected()){
                        writer.append("11");
                    }
                    else {
                        writer.append("00");
                    }
                    writer.append('\n');
                    System.out.println(new_s);
                    writer.flush();
                    writer.close();
                }
                catch(IOException e2)
                {
                    e2.printStackTrace();
                }
            }
        });
 
        //Зчитивание з сsv файла
        form.addWindowListener(new WindowAdapter() {
            @Override
            public void windowOpened(WindowEvent e) {
                super.windowOpened(e);
 
                try {
                    File file = new File("event_list.csv");
                    FileReader fr = new FileReader(file);
                    BufferedReader br = new BufferedReader(fr);
 
                    String line = "";
 
                    String[] tempArr;
                    while ((line = br.readLine()) != null) {
                        tempArr = line.split(delimiter);
                        form.event.setText(tempArr[0]);
                        empList.add(tempArr[0]);
                        form.descEvent.setText(tempArr[1].replace('&','\n'));
                        empList.add(tempArr[1].replace('&','\n'));
                        form.Date.setText(tempArr[2]);
                        empList.add(tempArr[2]);
                        form.Time.setText(tempArr[3]);
                        empList.add(tempArr[3]);
                        if(tempArr[4] == "11"){
                            form.vaz.setSelected(true);
                            empList.add(tempArr[4]);
                        }
                        else {
                            form.vaz.setSelected(false);
                            empList.add(tempArr[4]);
                        }
                    }
                    br.close();
 
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                System.out.println(empList.size());
                k = empList.size()-5;
            }
 
        });
 
        //Предедущая запись
        form.previous.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(k > 0) {
                    k = k - 5;
                    form.event.setText(empList.get(k));
                    form.descEvent.setText(empList.get(k + 1));
                    form.Date.setText(empList.get(k + 2));
                    form.Time.setText(empList.get(k + 3));
                    if(empList.get(k+4).equals("11")){
                        form.vaz.setSelected(true);
                    }
                    else {
                        form.vaz.setSelected(false);
                    }
                }
                else {
                    System.out.println("Error");
                }
            }
        });
 
        //Следущая запись
        form.next.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(k < empList.size()-5) {
                    k = k + 5;
                    form.event.setText(empList.get(k));
                    form.descEvent.setText(empList.get(k + 1));
                    form.Date.setText(empList.get(k + 2));
                    form.Time.setText(empList.get(k + 3));
                    if(empList.get(k+4).equals("11")){
                        form.vaz.setSelected(true);
                    }
                    else {
                        form.vaz.setSelected(false);
                    }
                }
                else {
                    System.out.println("Error");
                }
            }
        });
 
 
    }
}
 
 
Сообщения:517
во первых почитай про MVC сэкономит тебе кучу времени и нервов при отладке.
во вторых не пихай медленный код в слушатель - заморозит ГУИ нафиг на время работы кода.
в третьих не занимайся любовью с бедной собачкой индексами, а сделай класс для хранения данных события.

насчёт хранения данных - прикинь количество записей и если их слишком много, то стоит подумать об использовании базы данных.

насчёт хранения данных на HDD - дописывать новые элементы можно через append, но для изменения значений в середине тебе придётся переписать весь файл.
Изменен:24 ноя 2017 07:42
 
 
Сообщения:5
Реализовать сохранение данных приложения в текстовый .CSV-файл и загрузку из файла - ето условие такое
 
 
Сообщения:517
тогда тебе проще
читать:
        List<Entry> entrys = new ArrayList<>();
        try
        {
            List<String> lines = Files.readAllLines(Paths.get("filename.txt"));
            
            for(String s : lines)
            {
                entrys.add(new Entry(s));
            }
        } catch (IOException ex)
        {
            
        }

писать:
        List<String> lines = new ArrayList<>();
        
        for(Entry e : entrys)
        {
            lines.add(e.toString());
        }
        
        try
        {
            Files.write(Paths.get("filename.txt"), lines, Charset.forName("UTF-8"));
        } catch (IOException ex)
        {
            
        }


конструктор и toString() напишешь сам.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет