Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:如何禁用TextArea的多行选项_Java_Csv_Javafx - Fatal编程技术网

JavaFX:如何禁用TextArea的多行选项

JavaFX:如何禁用TextArea的多行选项,java,csv,javafx,Java,Csv,Javafx,我有一个从csv文件读写的应用程序。我的程序中有一个文本区,但当我键入一些多行文本时,csv文件会被破坏,应用程序无法启动,因为它无法从中读取 这是我用来保存和加载的 public void save() throws IOException { try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) { for (Tasks o : (getTasks())) { bw

我有一个从csv文件读写的应用程序。我的程序中有一个文本区,但当我键入一些多行文本时,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();
}
它应该是什么样子:

csv文件的外观:


您应该在保存之前转义新行字符,因为它们会破坏您的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,例如。或者,您可以将您的任务保存为另一种文本格式,如json或xml。

您可以共享一个吗?以下是整个repo:不幸的是,我不知道应该给出什么作为示例:一个简单的代码片段,显示您的问题,每个人都可以简单地用它重现。非常感谢。最近我只使用json,老实说,我不知道这次为什么要尝试csv。而且由于构造函数中的这一点,无法出现在标题中,但它不是您提到的iftask.contains的最佳解决方案;抛出新的IllegalArgumentException@VratislavHolub JSON和XML用于层次结构或任意结构的数据,但并非所有实例中的字段都相同。相反,和格式用于数据、简单的列和行。