从 Java 读取和编辑文件

Read and edit the file from Java

我试图在现有 file.But 行的每第 100 个字符处引入一个换行符,它不会写入任何内容。下面是在 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})", "\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);

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

首先,line.replaceAll 不会用结果替换您的行变量。因为 Strings 是不可变的,这个方法 returns 新的字符串,所以你的行应该是 line = line.replaceAll(....

其次,您永远不会将新的 String 写回到文件中。使用 replaceAll 不会以任何方式更改文件本身。相反,请尝试使用您的 bw 对象将新的 String 写入同一行。

根据您在此处发布的内容,您从未尝试将 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})", "\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 将 return 源的副本而非原始 String;