У меня есть текстовый файл, который будет содержать повторяющиеся строки следующей информации (без маркеров):
В каждом «наборе» номера будут разными, как и адрес электронной почты. Это всего лишь пример. Что я хочу сделать, так это просмотреть текстовый файл, уточнить строку с конкретным кодом, который я ищу, а затем удалить этот код, адрес электронной почты и строку с номером. Например, строка с кодом в ней, а также следующие две строки. Я не могу, на всю жизнь, понять, как это сделать. Я научился заменять эти строки чем-то другим, но я хотел бы полностью стереть их, желательно без необходимости каждый раз создавать новый текстовый файл, если только нет способа создать новый текстовый файл с удаленными строками, и замените старый файл этим новым. Вот соответствующий код, который у меня есть, в сегментах. Код заменяет все строки, соответствующие переменной oldLine, пустой строкой. Это не то, что я хочу, но я не могу понять это иначе. Я получил большую часть этого кода из примера в другом месте.
//Instantiating the File class
String filePath = "C:\\\\Users\\\\taylo\\\\Astronomy\\\\Which Bright Stars Are Visible\\\\StoreVerificationCodes.txt";
//Instantiating the Scanner class to read the file
Scanner sc = new Scanner(new File(filePath));
//instantiating the StringBuffer class
StringBuffer buffer = new StringBuffer();
//Reading lines of the file and appending them to StringBuffer
while (sc.hasNextLine()) {
buffer.append(sc.nextLine()+System.lineSeparator());
}
String fileContents = buffer.toString();
System.out.println("Contents of the file: "+fileContents);
//closing the Scanner object
sc.close();
String oldLine = "Code: 12345";
String newLine = "";
//Replacing the old line with new line
fileContents = fileContents.replaceAll(oldLine, newLine);
//instantiating the FileWriter class
FileWriter writer = new FileWriter(filePath);
System.out.println("");
System.out.println("new data: "+fileContents);
writer.append(fileContents);
writer.flush();
writer.close();
Отвечает ли это на ваш вопрос? Найдите строку в файле и удалите её
Ну, я думаю, то, что вы ищете, это substring
метод. Я полагаю, что есть какая-то причина, по которой у вас есть это требование, когда у вас есть только код, и вы также должны удалить следующие две строки этого набора. Пожалуйста, взгляните на приведенный ниже код. Это должно работать, учитывая, что структура вашего файла фиксирована и не собирается меняться.
String filePath = "C:/Users/taylo/Astronomy/Which Bright Stars Are Visible/StoreVerificationCodes.txt";
//Instantiating the Scanner class to read the file
Scanner sc = new Scanner(new File(filePath));
//instantiating the StringBuffer class
StringBuffer buffer = new StringBuffer();
//Reading lines of the file and appending them to StringBuffer
while (sc.hasNextLine()) {
buffer.append(sc.nextLine()+System.lineSeparator());
}
String fileContents = buffer.toString();
System.out.println("Contents of the file: "+fileContents);
//closing the Scanner object
sc.close();
String oldLine = "Code: 789678";
String newLine = "";
// My changes starts here.............
String codePattern = "Code:"; // A fixed pattern
int firstIndex = fileContents.indexOf(oldLine); // To get the index of code you looking for.
int nextIndex= fileContents.indexOf(codePattern, firstIndex+1);
if (nextIndex != -1) {
nextIndex = fileContents.indexOf(codePattern, firstIndex+1) -5;
fileContents = fileContents.substring(0, firstIndex) + fileContents.substring(nextIndex+3);
}
else
fileContents = fileContents.substring(0, firstIndex);
// My changes done here.............
//fileContents = fileContents.replaceAll(oldLine, newLine); //No need
FileWriter writer = new FileWriter(filePath);
System.out.println("");
System.out.println("new data: "+fileContents);
writer.append(fileContents);
writer.flush();
writer.close();
Спасибо вам за помощь! Он отлично работает, но выбрасывает индекс строки за пределы диапазона, когда я пытаюсь выполнить последний код в списке, особенно в строке fileContents = fileContents.substring.....
Спасибо @MusicalUniverse. Тот случай я не тестировал. Обновил решение. необходимые дополнительные проверки, которые вы можете установить в любое время.
Запишите данные без строк в новый файл, после того, как вы закончите, удалите старый файл и переименуйте новый в имя старого файла.