2013-09-09 4 views
-1

Я пытаюсь прочитать содержимое файла и удалить определенную строку, но мне все еще не удалось. Я пробовал this link tooНе удалось удалить определенное слово из файла

но он не работает, и я тоже пытался с ignorecase, и весь мой файл был удален в этом случае. :(

мой собственный код, как

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset)); 
     PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(tempfile), charset)); BufferedWriter bw = new BufferedWriter(writer); 

     while((currentLine = reader.readLine()) != null) 
     { 
      //System.out.println(currentLine); 

      if (currentLine.equals(del)) 
      currentLine = currentLine.replace(del, ""); 
      writer.write(currentLine); 

     } 
     tempfile.renameTo(file); 
+0

Что строка это? Имеет ли он символы регулярных выражений? – Zavior

+1

Что не работает? это ошибка? исключение? плохой результат? –

+0

Что означает «не работает»? Вы получаете исключение? Не выполняется ли ваш оператор if? Я вижу несколько проблем в вашем коде. Самое большое, что вы, кажется, не закрываете свои потоки. – Matthias

ответ

0

Вы можете сохранить большую часть исходного кода и избежать хранений всего файла в списке (который может быть плохим, если ваш файл большой). Вот автономные вы можете играть с:

import java.io.*; 

public class StringRepl { 
    public void doReplace(String oldFileName, String newFileName) { 
     File oldFile = new File(oldFileName); 
     File tempFile = new File(newFileName); 

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(oldFile), "utf-8")); 

      PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(tempFile), "utf-8")); 
      BufferedWriter bw = new BufferedWriter(writer); 
      String currentLine; 
      String del = "hi"; 
      while((currentLine = reader.readLine()) != null) 
      { 
       //System.out.println(currentLine); 

       if (currentLine.contains(del)) 
        currentLine = currentLine.replace(del, ""); 
       bw.write(currentLine); 
       bw.newLine(); 

      } 
      bw.close(); 
      reader.close(); 
      writer.close(); 
      //tempFile.renameTo(oldFile); 
     } catch (FileNotFoundException fnfe) { 
      System.out.print("No file found: " + oldFileName); 
     } catch (UnsupportedEncodingException uee) { 
      System.out.print("'utf-8' not supported"); 
     } catch (IOException ioe) { 
      System.out.print("Error using file!"); 
      ioe.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     StringRepl sr = new StringRepl(); 
     sr.doReplace("o.txt","n.txt"); 
    } 
} 

компилировать и запускать:

javac StringRepl.java 
java StringRepl 

o.txt:

hi how are you? 
I am fine. 
again hi hi. 

n.txt:

how are you? 
I am fine. 
again . 
0

Вы логика Удалить строку только если полная строка соответствует, если вы хотите, чтобы соответствовать часть строки в каждой строке, попробуйте использовать спички (или) подстрока метод доступен в строке класса

+0

хорошо, так что я должен сделать токенизацию линии первой или как разбить ее на какой-то разделитель ... позвольте мне попробовать – lost

+0

да, правильно. разделитель будет «" (пробел) – upog

0

вы получаете любое исключение или просто новый файл, имеющий все содержимое так же, как и исходный файл?

вы должны закрыть поток записи, так что его содержание сбрасываться в физический файл и то можете попробовать проверить файл.

+0

оригинальное содержимое такое же. не получая никаких исключений. writer.close(); reader.close(); i закрыт, используя выше. – lost

0

currentLine.equals(del) вы имеете в виду currentLine.matches(del)

currentLine.equals(del) соответствует одному всей линии, в то время как currentLine.matches(del) соответствует подстроке CurrentLine.

+0

нет, он не работает даже – lost

0

Вы можете сделать это путь

BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt")); 
    List<String> lines=new ArrayList<>(); 
    String currentLine = new String(); 
    while ((currentLine = br.readLine()) != null) { 
     if (currentLine.contains("hi")) { 
      lines.add(currentLine.replace("hi", "")); 
     }else { 
      lines.add(currentLine); 
     } 
    } 
    BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\test.txt")); 
    for (String i:lines){ 
     bw.write(i); 
     bw.newLine(); 
    } 
    bw.close(); 

Вот мой вход.

hi how are you? 
    I am fine. 
    again hi hi. 

вне положенного

how are you? 
I am fine. 
again . 
+0

спасибо :) У меня мало идей с рамками коллекций, но теперь я сделаю это – lost

Смежные вопросы