2016-04-27 1 views
2

Я пытаюсь ввести разрыв строки на каждом 100-м символе строки из существующего файла. Но он ничего не пишет. ниже приведен код, написанный в java для чтения существующего файла и записи на него с временным файлом.Прочитайте и отредактируйте файл с Java

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class ReplaceFileContents { 
    public static void main(String[] args) { 
    new ReplaceFileContents().replace(); 
    } 

    public void replace() { 
     String oldFileName = "Changed1.ldif"; 
     String tmpFileName = "Changed2.ldif"; 

     BufferedReader br = null; 
     BufferedWriter bw = null; 
     try { 
     br = new BufferedReader(new FileReader(oldFileName)); 
     bw = new BufferedWriter(new FileWriter(tmpFileName)); 
     String line; 
     while ((line = br.readLine()) != null) {  
       line.replaceAll("(.{100})", "$1\n");  
     } 
     } catch (Exception e) { 
     return; 
     } finally { 
     try { 
      if(br != null) 
       br.close(); 
     } catch (IOException e) { 
      // 
     } 
     try { 
      if(bw != null) 
       bw.close(); 
     } catch (IOException e) { 
      // 
     } 
     } 
     // Once everything is complete, delete old file.. 
     File oldFile = new File(oldFileName); 
     oldFile.delete(); 

     // And rename tmp file's name to old file name 
     File newFile = new File(tmpFileName); 
     newFile.renameTo(oldFile); 

    } 
} 
+1

Не замораживайте «Исключение» !! попробуйте вывести их на консоль. – ortis

+5

Вы не пишете на 'bw' в любом месте –

+0

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

ответ

7
while ((line = br.readLine()) != null) {  
    line.replaceAll("(.{100})", "$1\n");  
} 

Во-первых, line.replaceAll не заменяет переменную строки с результатом. Поскольку Strings неизменяемы, этот метод возвращает новую строку, поэтому ваша строка должна быть line = line.replaceAll(....

Во-вторых, вы никогда не записываете новый String в файл. Использование replaceAll никоим образом не изменяет файл. Вместо этого попробуйте использовать объект bw для записи нового String в ту же строку.

+0

Спасибо, что пишет. Но я действительно ожидал, что после разговора скажу, что строка прерывается. Входной ----- ABCDEF GH ijklmn выход ------ ABCD эф GH IJKL млн , но вышеуказанные коды записывает все в одной строке. – user1650864

+0

'BufferedReader.read' будет читать по одному символу за раз. 'BufferedWriter.write' будет писать, не создавая новую строку позже. – Zircon

1

Из того, что вы опубликовали здесь, вы никогда не пытаетесь написать line до bw. Попробуйте это:

package hello; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class Test { 
    public static void main(String[] args) { 
     new Test().replace(); 
    } 

    public void replace() { 
     String oldFileName = "d:\\1.txt"; 
     String tmpFileName = "d:\\2.txt"; 

     BufferedReader br = null; 
     BufferedWriter bw = null; 
     try { 
      br = new BufferedReader(new FileReader(oldFileName)); 
      bw = new BufferedWriter(new FileWriter(tmpFileName)); 
      String line; 
      while ((line = br.readLine()) != null) { 
       line = line.replaceAll("(.{100})", "$1\n"); 
       bw.write(line); 
      } 
     } catch (Exception e) { 
      return; 
     } finally { 
      try { 
       if(br != null) 
        br.close(); 
      } catch (IOException e) { 
       // 
      } 
      try { 
       if(bw != null) 
        bw.close(); 
      } catch (IOException e) { 
       // 
      } 
     } 
     // Once everything is complete, delete old file.. 
     File oldFile = new File(oldFileName); 
     oldFile.delete(); 

     // And rename tmp file's name to old file name 
     File newFile = new File(tmpFileName); 
     newFile.renameTo(oldFile); 

    } 
} 
  1. Вы никогда не пытайтесь писать строки обратно в bw;
  2. String#replaceAll вернет копию источника, а не оригинал String;
Смежные вопросы