#java #file #text #file-io #io
#java #файл #текст #file-io #io
Вопрос:
Я хочу удалить определенную строку из текстового файла. Я нашел эту строку, но что делать дальше? Есть идея?
Ответ №1:
Прочитайте файл из потока и запишите его в другой поток и пропустите строку, которую вы хотите удалить
Ответ №2:
В удалении строк нет никакого волшебства.
- Скопируйте файл построчно, без ненужной строки.
- Удалите исходный файл.
- переименуйте копию в исходный файл.
Комментарии:
1. Вы создаете новый файл путем записи в файл, который не существует. Вы можете добавить расширение типа
.new
для создания нового файла. Вы можете переименовать ее с помощьюFile.rename()
Ответ №3:
Попробуйте этот код.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
class Solution {
public static void main(String[] args) throws FileNotFoundException, IOException{
File inputFile = new File("myFile.txt");
File tempFile = new File("myTempFile.txt");
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
String lineToRemove = "bbb";
String currentLine;
while((currentLine = reader.readLine()) != null) {
// trim newline when comparing with lineToRemove
String trimmedLine = currentLine.trim();
if(trimmedLine.equals(lineToRemove)) continue;
writer.write(currentLine System.getProperty("line.separator"));
}
writer.close();
reader.close();
boolean successful = tempFile.renameTo(inputFile);
System.out.println(successful);
}
}
Ответ №4:
Попробуйте прочитать файл:
public static String readAllText(String filename) throws Exception {
StringBuilder sb = new StringBuilder();
Files.lines(Paths.get(filename)).forEach(sb::append);
return sb.toString();
}
затем разделить текст из определенного символа (для новой строки » n»)
private String changeFile(){
String file = readAllText("file1.txt");
String[] arr = file.split("n"); // every arr items is a line now.
StringBuilder sb = new StringBuilder();
for(String s : arr)
{
if(s.contains("characterfromlinewillbedeleted"))
continue;
sb.append(s); //If you want to split with new lines you can use sb.append(s "n");
}
return sb.toString(); //new file that does not contains that lines.
}
затем запишите строку этого файла в новый файл с:
public static void writeAllText(String text, String fileout) {
try {
PrintWriter pw = new PrintWriter(fileout);
pw.print(text);
pw.close();
} catch (Exception e) {
//handle exception here
}
}
writeAllText(changeFile(),"newfilename.txt");
Комментарии:
1. Вам следует изменить здесь «characterfromlinewillbedeleted» на то, какие строки будут удалены у вас.
Ответ №5:
Удаление текстовой строки непосредственно из файла невозможно. Мы должны прочитать файл в память, удалить текстовую строку и переписать отредактированное содержимое.
Комментарии:
1. Хотя, конечно, необязательно, чтобы весь файл помещался в память, поскольку вы можете читать и записывать в одном цикле.
2. @Simon — согласен — нам не обязательно хранить весь файл в памяти, но в конце каждый отдельный байт файла был прочитан, помещен в буфер где-нибудь в оперативной памяти и записан в новый целевой файл.
Ответ №6:
Возможно, метод поиска будет делать то, что вы хотите, т.Е. метод «search» принимает строку в качестве параметра и выполняет поиск по ней в файле и заменяет строку, содержащую эту строку.
PS:
public static void search (String s)
{
String buffer = "";
try {
Scanner scan = new Scanner (new File ("filename.txt"));
while (scan.hasNext())
{
buffer = scan.nextLine();
String [] splittedLine = buffer.split(" ");
if (splittedLine[0].equals(s))
{
buffer = "";
}
else
{
//print some message that tells you that the string not found
}
}
scan.close();
} catch (FileNotFoundException e) {
System.out.println("An error occured while searching in file!");
}
}