Удаление записи из csv-файла

Я делаю программу, которая удалит определенную запись с определенным идентификатором, который введет пользователь. Запись удаляется из существующего CSV-файла с именем Database.csv, и для облегчения этого процесса создается временный файл с именем temp.csv. Код компилируется и запускается, но когда я ввожу идентификатор, который хочу удалить, консоль показывает диалоговое окно с сообщением об ошибке, но не детализирует ошибку. Что это может быть за ошибка и как ее решить?

import java.io.*;
import java.util.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
import javax.swing.*;  

public class delete {
    public static Scanner x;
    public static void main(String[] args) {
        String filepath = "Database.csv";
        System.out.print("Enter the id you want to delete: ");
        Scanner sc = new Scanner(System.in);
        String removeTerm = sc.nextLine();
        removeRecord(filepath,removeTerm);

    }

    public static void removeRecord(String filepath, String removeTerm)
{
    String tempFile = "temp.csv";
    File oldFile = new File(filepath);
    File newFile = new File(tempFile);
  String id = ""; String fn = ""; String ln = ""; String sl = ""; String lc = "";
  try{ 
    FileWriter fw = new FileWriter(tempFile,true);
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter pw= new PrintWriter(bw);
    x = new Scanner(new File(filepath));
    x.useDelimiter("[,\n]");
    while(x.hasNext())
    {
        id = x.next();
        fn = x.next();
        ln = x.next();
        sl = x.next();
        lc = x.next();
        if (!id.equals(removeTerm))
        {
                pw.println(id + "," + fn + "," + ln + "," + sl + "," + lc);

        }
    }
    x.close();
    pw.flush();
    pw.close();
    oldFile.delete();
    File dump = new  File(filepath);
    newFile.renameTo(dump);
  }


    catch(Exception e){
             JOptionPane.showMessageDialog(null,"Error");
        }
  }
}

Напечатайте сообщение об исключении в блоке catch, и вы увидите, в чем проблема.

rockfarkas 15.02.2019 07:02

У @rockfarkas уже есть сообщение об исключении. Ничего не говорит об ошибке.

Rithwick Negi 15.02.2019 07:43

.txt работает с этим кодом, но .cvs выдает ошибку. В случае .cvs создается temp.cvs, а не удаляется, что также означает, что данные не записываются в Database.cvs, который является основным файлом.

Rithwick Negi 15.02.2019 07:45

Создание окна сообщения с надписью «ошибка» — это не то же самое, что просто выполнить обычно (подмигнуть, подмигнуть, подтолкнуть) «e.printStackTrace();» в котором есть вся необходимая информация. Который мы переведем для вас, если вы дадите его нам.

Dreamspace President 15.02.2019 08:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
50
1

Ответы 1

Вы можете увидеть, какая ошибка может быть, если вы напечатаете исключение:

  • Распечатайте трассировку стека в System.err:

    } catch (Exception e) {
    
        e.printStackTrace(System.err);
    }
    
  • Используйте JOptionPane и распечатайте исключение:

    } catch (Exception e) {
    
        String message = "Message: " + e.getMessage()
                + "\nStackTrace: " + java.util.Arrays.toString(e.getStackTrace());
        String title = e.getClass().getName();
        JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
    }
    

Я думаю, что вы можете решить это после того, как узнаете свою проблему.

Другие вопросы по теме