#java
#java
Вопрос:
В настоящее время я пытаюсь решить эту проблему, из-за которой, похоже, я не могу удалить конкретное содержимое файла csv.
package projectasdp;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Test {
private static Scanner x;
public static void main(String[] args) {
String filepath = "TradeDetails.txt";
String removeTerm = "3";
removeRecord(filepath, removeTerm);
}
public static void removeRecord(String filepath, String removeTerm) {
String tempFile = "temp.txt";
File oldFile = new File(filepath);
File newFile = new File(tempFile);
String animalID = "";
String seller = "";
String buyer = "";
String wayToTrade = "";
String tradeID = "";
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("[,rn] ");
while(x.hasNext()) {
animalID = x.next();
seller = x.next();
buyer = x.next();
wayToTrade = x.next();
tradeID = x.next();
if(!animalID.equals(removeTerm)){
pw.println(animalID "," seller "," buyer "," wayToTrade "," tradeID );
}
}
x.close();
pw.flush();
pw.close();
oldFile.delete();
File dump = new File(filepath);
newFile.renameTo(dump);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error");
}
}
}
CSV:
0,Ann,Jesca,offonline,20180411091801
3,Dave,Dianna,online,20180418105901
6,Dianna,Flynn,offonline,20180418162304
25041019042018,Lex,Ada,online,20180419102911
123456,D,Lucasy,offonline,2018042316230011333,ggg,EEE,online,20190319135223
334,John,Malik,online,20190319135310
Идея здесь в том, чтобы удалить всю информацию идентификатора 3, которая в данном случае является 3,Dave,Dianna,online,20180418105901
. Я указал это с помощью переменной removeTerm.
До сих пор мне не удалось заставить это работать, и есть другие решения этой проблемы, с которыми я, возможно, не знаком, поэтому я был бы очень признателен за любую помощь.
Комментарии:
1. Что не работает? Что вы получаете?
2. Кстати, 5-я строка, похоже, представляет собой объединение двух строк.
3. Ошибка. Файл csv не обновляется, ничего не удаляется
Ответ №1:
Ошибка, которую вы получаете, java.util.NoSuchElementException
при чтении файла.
Это вызвано тем фактом, что 2 строки объединены.
2018042316230011333
в 5-й строке интерпретируется как traceId.
Следующее поле (ggg) интерпретируется как следующий AnimalID.
Из-за этого последнее поле в последней строке считается wayToTrade. Затем, пытаясь прочитать окончательный traceId, вы получаете ошибку.
Может быть, лучше прочитать файл построчно, разбить его на свои поля и пропустить строку в случае, если первое поле равно указанному removeTerm.
Комментарии:
1. решит ли проблему удаление
,ggg,EEE,online,20190319135223
?2. Вместо удаления этой части, вы можете захотеть вставить новую строку перед
11333,ggg
3. хм, почему-то это ничего не делает для меня, как будто ничего не отображается.
4. Ничего не появилось, значит, ошибка не была обнаружена? Был ли файл обновлен?
5. Запустите отладчик и попытайтесь понять, почему строка не удаляется. Я скопировал ваш код в eclipse и создал файл, как указано. Все сработало, как ожидалось.