JavaFX: как отключить многострочный вариант TextArea - PullRequest
0 голосов
/ 10 марта 2019

У меня есть приложение, которое пишет и читает из CSV-файла.У меня есть TextArea в моей программе, но когда я набираю какой-то многострочный текст, файл csv нарушается, и приложение не может запуститься, потому что оно не может читать из него.

Вот что я использую для сохранения и загрузки.

public void save() throws IOException {
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
        for (Tasks o : (getTasks())) {
            bw.write(o.getTask() + ";" +
                    o.getDeadline().toString() + ";" +
                    o.getDescription());
            bw.newLine();
        }
    }
}

public void load() throws IOException, ParseException {
    File file = new File(path);
    if (file.exists()) {
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            List<Tasks> tempTasks = new ArrayList<>();
            String line;
            while ((line = br.readLine()) != null) {
                String[] parts = line.split(";");
                String task = parts[0];
                LocalDate deadline = LocalDate.parse(parts[1]);
                String desc = parts[2];
                tempTasks.add(new Tasks(task, deadline, desc));
            }
            tasks.clear();
            tasks.addAll(tempTasks);
        }
    } else
        tasks.clear();
}

Как это должно выглядеть:

How it should look

Как выглядит CSV-файл:

how csv file looks

1 Ответ

1 голос
/ 10 марта 2019

Вы должны экранировать символы новой строки перед сохранением, потому что они уничтожают ваш CSV-файл, как вы уже упоминали.

Вы можете использовать description.replace("\n", "\\n") для выхода из режима сохранения и description.replace("\\n", "\n") для удаления из памяти при загрузке.

public void save() throws IOException {
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
        for (Tasks o : (getTasks())) {
            bw.write(o.getTask() + ";" +
                    o.getDeadline().toString() + ";" +
                    o.getDescription().replace("\n", "\\n"));
            bw.newLine();
        }
    }
}

public void load() throws IOException, ParseException {
    File file = new File(path);
    if (file.exists()) {
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            List<Tasks> tempTasks = new ArrayList<>();
            String line;
            while ((line = br.readLine()) != null) {
                String[] parts = line.split(";");
                String task = parts[0];
                LocalDate deadline = LocalDate.parse(parts[1]);
                String desc = parts[2].replace("\\n", "\n");
                tempTasks.add(new Tasks(task, deadline, desc));
            }
            tasks.clear();
            tasks.addAll(tempTasks);
        }
    } else
        tasks.clear();
}

Но использование ; в заголовке или описании также может привести к провалуCSV.

Я бы предложил использовать внешнюю библиотеку для обработки csv, например, Apache Commons CSV .В качестве альтернативы вы можете сохранить свои задачи в другом текстовом формате, например, в формате json или xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...