2013-09-01 2 views
1
public void removeLine() { 
     try { 
      File dir = new File("chars"); 
      if(dir.exists()) { 
       String read; 
       File files[] = dir.listFiles(); 
       for (int j = 0; j < files.length; j++) { 
        File loaded = files[j]; 
        if (loaded.getName().endsWith(".txt")) { 
         Scanner s = new Scanner (loaded); 
         while (s.hasNextLine()) { 
          read = s.nextLine(); 
          if (read.contains("char-15")) { 
           read.replace(read, ""); 
           System.out.println(loaded.getName() +" - Data: "+read); 
           break;       
          }      
         }     
        }   
       } 
      } 
     } catch (Exception e) { 

     } 

    } 

Что нужно сделать, это заменить каждую строку, содержащую «char-15», с пустой строкой.Замена/удаление строки в текстовом файле

Когда я запускаю это, он не удаляет строку во всех файлах. Я не могу сделать это вручную, так как есть более 5000 файлов.

Как я могу удалить эту конкретную строку во всех файлах?

+0

Вы должны записать вывод во временный файл, как только вы закончите читать исходный файл, удалите его и переместите временный файл на свое место. – MadProgrammer

ответ

0

В Java 7 вы можете сделать что-то вроде этого:

if (loaded.getName().endsWith(".txt")) { 
    Path path = Paths.get(loaded.getName()); 
    String content = new String(Files.readAllBytes(path)); 
    content = content.replaceAll("char-15", ""); 
    Files.write(path, content.getBytes()); 
} 
2

Вы можете сделать это легко с помощью Apache Common IO API

Вот полный рабочий пример

import java.io.File; 
import java.io.IOException;  
import org.apache.commons.io.FileUtils; 

public class FileUpdater { 

    public static void main(String[] args) throws IOException { 
     File dir = new File("D:\\dummy"); 
     if (dir.exists() && dir.isDirectory()) { 
      File[] listFiles = dir.listFiles(); 
      for (File file : listFiles) { 
       if (file.getName().contains(".txt")) { 
        String fileString = FileUtils.readFileToString(file); 
        String finalString = fileString.replaceAll("char-15", ""); 
        FileUtils.writeStringToFile(file, finalString); 
       } 

      } 
     } 
    } 

} 

Приведенный выше код будет replacechar-15 до empty в каждом файле

}

+0

Если это помогло, то отметьте как ответ. – Makky

0

Java sting неизменен и окончателен, в зависимости от того, какая операция вы сделали в String, он создаст только новый экземпляр. Таким образом, read.replace(read, ""); не поможет заменить слово в вашем файле.

0

Во-первых загрузка файла в виде строки:

public static String readAllText(InputStream is) { 
    StringBuilder sb = new StringBuilder(); 
    try { 
     Reader r = new InputStreamReader(is); 
     int c; 
     while ((c = r.read()) != -1) sb.append(char.class.cast(c)); 
    } catch (Exception e) { 
     //Handle Exception 
    } 
    return sb.toString(); 
} 

затем удалить:

public static String removeUntil(String str, String c, int st) 
{ 
    StringBuilder sb = new StringBuilder(str); 
    str = sb.reverse().toString(); 
    for(int i = 0;i<st;i++) 
     str = str.substring(0,str.lastIndexOf(c)); 
    sb = new StringBuilder(str); 
    str = sb.reverse().toString(); 
    return str; 
} 

напр: removeUntil ("I.want.remove.this.until.third.dot", ". », 3); то результат -> this.until.third.dot

+0

Также вы можете изменить при загрузке String с readAllText, String s = readAllText (новый FileInputStream ("filename")); затем s = s.replace ("char-15", ""); –

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