批量替换指定目录下所有文件中的指定字符串

package com.general;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;

/*
* @author chenyanwei
* @date 22 Jan 2019 21:56:07
* @version 1.0
*/
/**
 * 批量修改目录下的文件的指定字符串
 * 
 * @author 18430
 *
 */

public class ModifyFile {
	public void modifyFile(String directory, String oldStr, String newStr) {
		RandomAccessFile raf = null;
		ArrayList<File> list = (ArrayList<File>) getFiles(directory);
		for (File file : list) {
			try {
				raf = new RandomAccessFile(file.getPath(), "rw");
				String line = null;
				long lastPoint = 0; // 记住上一次的偏移量
				while ((line = raf.readLine()) != null) {
					final long ponit = raf.getFilePointer();
					if (line.contains(oldStr)) {
						String str = line.replace(oldStr, newStr);
						raf.seek(lastPoint);
						raf.writeBytes(str);
					}
					lastPoint = ponit;
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					raf.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	public List<File> getFiles(String directory) {
		ArrayList<File> list = new ArrayList<File>();
		File file = new File(directory);
		if (file.exists()) {
			File[] file1 = file.listFiles();
			for (File file2 : file1) {
				list.add(file2);
			}
		}
		return list;

	}

}

猜你喜欢

转载自www.cnblogs.com/yanweichen/p/10306461.html
今日推荐