替换文件中某个字符串并写入新内容(Java代码实现)
2015-02-28 16:26
691 查看
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStream; import java.io.InputStreamReader; /* * 替换文件(如果该文件含有子目录,则包括子目录所有文件)中某个字符串并写入新内容(Java代码实现). * *原理:逐行读取源文件的内容,一边读取一边同时写一个*.tmp的文件。 *当读取的行中发现有需要被替换和改写的目标内容‘行’时候,用新的内容‘行’替换之。 *最终,删掉源文件,把*.tmp的文件重命名为源文件名字。 * *注意!代码功能是逐行读取一个字符串,然后检测该字符串‘行’中是否含有替换的内容,有则用新的字符串‘行’替换源文件中该处整个字符串‘行’。没有则继续读。 *注意!替换是基于‘行’,逐行逐行的替换! * * */ public class Modify { private String path; private final String target; private final String newContent; public Modify(String path, String target, String newContent) { // 操作目录。从该目录开始。该文件目录下及其所有子目录的文件都将被替换。 this.path = path; // target:需要被替换、改写的内容。 this.target = target; // newContent:需要新写入的内容。 this.newContent = newContent; operation(); } private void operation() { File file = new File(path); opeationDirectory(file); } public void opeationDirectory(File dir) { File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { File f = files[i]; if (f.isDirectory()) // 如果是目录,则递归。 opeationDirectory(f); if (f.isFile()) operationFile(f); } } public void operationFile(File file) { try { InputStream is = new FileInputStream(file); BufferedReader reader = new BufferedReader( new InputStreamReader(is)); String filename = file.getName(); // tmpfile为缓存文件,代码运行完毕后此文件将重命名为源文件名字。 File tmpfile = new File(file.getParentFile().getAbsolutePath() + "\\" + filename + ".tmp"); BufferedWriter writer = new BufferedWriter(new FileWriter(tmpfile)); boolean flag = false; String str = null; while (true) { str = reader.readLine(); if (str == null) break; if (str.contains(target)) { writer.write(newContent + "\n"); flag = true; } else writer.write(str + "\n"); } is.close(); writer.flush(); writer.close(); if (flag) { file.delete(); tmpfile.renameTo(new File(file.getAbsolutePath())); } else tmpfile.delete(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { //代码测试:假设有一个test文件夹,test文件夹下含有若干文件或者若干子目录,子目录下可能也含有若干文件或者若干子目录(意味着可以递归操作)。 //把test目录下以及所有子目录下(如果有)中文件含有"hi"的字符串行替换成新的"hello,world!"字符串行。 new Modify(".\\test", "hi", "hello,world!"); } }
相关文章推荐
- 替换文件中某个字符串并写入新内容(Java代码实现)
- 替换文件中某个字符串并写入新内容(Java代码实现)
- 用java代码实现从excel表格读取数据然后写入生成国际化配置文件properties
- java html内容生成word文件实现代码
- java 实现字符串以及文件的md5、sha计算完整代码
- Java底层代码实现单文件读取和写入(解决中文乱码问题)
- Java字符串写入文件三种方式的实现
- java实现持续写入内容到txt文件
- java实现持续写入内容到txt文件
- Java将字符串写入文件与将文件内容读取到字符串
- JAVA代码实现从文件写入东西后有读出来=========FileInputStream
- 使用Java实现文件内容的写入读出
- lua实现以字符串内容写入文件,成功返回 true,失败返回 false读取文件内容
- Java底层代码实现多文件读取和写入
- 替换TXT文件里的字符串,一行一行查找替换,java代码
- java实现 统计文件内容出现某字符串几次
- java 实现txt文件读取,写入操作实例代码。
- 小程序-----JAVA代码实现文件内容的复制
- java实现文件的写入数据和附加数据功能代码
- java代码-----实现有键盘获得的字符串存储在文件中,并从文件中读取后显示在屏幕上