2013-08-16 4 views
0

У меня есть папка с набором файлов, где некоторые строки в каждом файле содержат определенный символ, состоящий из #, $ и%. Как я могу просто удалить эти символы из этих файлов, сохранив другое содержимое точно так же, как раньше. Как это сделать на Java?удалить некоторые конкретные символы из набора файлов

+3

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

ответ

2

Вот решение с Java NIO.

Set<Path> paths = ... // get your file paths 
// for each file 
for (Path path : paths) { 
    String content = new String(Files.readAllBytes(path)); // read their content 
    content = content.replace("$", "").replace("%", "").replace("#", ""); // replace the content in memory 
    Files.write(path, content.getBytes(), StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING); // write the new content 
} 

Я не предоставлял обработку исключений. Поступай с этим так, как хочешь.

ИЛИ

Если вы на Linux, использовать в Java ProcessBuilder построить команду sed для преобразования содержимого.

+1

Не лучше ли было бы потоковое воспроизведение файлов по очереди? Это, вероятно, вызовет OOME даже с довольно небольшими файлами ... –

+0

@BoristheSpider В случаях, когда файл большой, конечно. Но вам придется писать в другой файл, пока вы читаете и переименовываете его (перезаписываете оригинал) в конце. –

0

В псевдокоде:

files = new File("MyDirectory").list(); 
for (file : files) { 
    tempfile = new File(file.getName() + ".tmp", "w"); 
    do { 
    buffer = file.read(some_block_size); 
    buffer.replace(targetCharacters, replacementCharacter); 
    tempfile.write(buffer); 
    } while (buffer.size > 0); 
    file.delete(); 
    tempfile.rename(file.getName()); 
} 
Смежные вопросы