Я делаю программу, которая удалит определенную запись с определенным идентификатором, который введет пользователь. Запись удаляется из существующего 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");
}
}
}
У @rockfarkas уже есть сообщение об исключении. Ничего не говорит об ошибке.
.txt работает с этим кодом, но .cvs выдает ошибку. В случае .cvs создается temp.cvs, а не удаляется, что также означает, что данные не записываются в Database.cvs, который является основным файлом.
Создание окна сообщения с надписью «ошибка» — это не то же самое, что просто выполнить обычно (подмигнуть, подмигнуть, подтолкнуть) «e.printStackTrace();» в котором есть вся необходимая информация. Который мы переведем для вас, если вы дадите его нам.




Вы можете увидеть, какая ошибка может быть, если вы напечатаете исключение:
Распечатайте трассировку стека в 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);
}
Я думаю, что вы можете решить это после того, как узнаете свою проблему.
Напечатайте сообщение об исключении в блоке catch, и вы увидите, в чем проблема.