应用场景:比方有一个深层次的文件目录结构,如:javaAPI

每一个文件中面都有同样的内容,而我们要统一改动为其它内容。上千个文件假设一个个改动显得太不明智。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter; public class Test {
/**
* @author itmyhome
*/
public static void main(String[] args) {
File f = new File("F:/javaAPI/java/lang/reflect");
print(f, 0);
} /**
* 遍历目录
*
* @param f
* @param len
*/
public static void print(File f, int len) {
File[] file = f.listFiles(); for (int i = 0; i < file.length; i++) {
if (file[i].isDirectory()) { //推断是否目录
print(file[i], len + 1);
} // 为防止输出文件覆盖源文件,所以更改输出盘路径 也可自行设置其它路径
File outPath = new File(file[i].getParent().replace("F:", "E:"));
File readfile = new File(file[i].getAbsolutePath()); if (!readfile.isDirectory()) {
String filename = readfile.getName(); // 读到的文件名称
String absolutepath = readfile.getAbsolutePath(); // 文件的绝对路径
readFile(absolutepath, filename, i, outPath); // 调用 readFile
}
}
} /**
* 读取目录下的文件
*
* @return
*/
public static void readFile(String absolutepath, String filename,
int index, File outPath) {
try {
BufferedReader bufReader = new BufferedReader(new InputStreamReader(
new FileInputStream(absolutepath), "gb2312")); // 数据流读取文件 StringBuffer strBuffer = new StringBuffer();
String newStr = "i love you too";
String oldStr = "i love you"; for (String temp = null; (temp = bufReader.readLine()) != null;
temp = null) {
if ((temp.indexOf(oldStr) != -1) &&
(temp.indexOf(oldStr) != -1)) { // 推断当前行是否存在想要替换掉的字符
temp = temp.replace(oldStr, newStr); // 此处进行替换
} strBuffer.append(temp);
strBuffer.append(System.getProperty("line.separator")); // 换行符
} bufReader.close(); if (outPath.exists() == false) { // 检查输出目录是否存在,若不存在先创建
outPath.mkdirs();
System.out.println("已成功创建输出目录:" + outPath);
} PrintWriter printWriter = new PrintWriter(outPath + "\\" +
filename, "gb2312"); // 替换后输出文件路径
printWriter.write(strBuffer.toString().toCharArray()); //又一次写入
printWriter.flush();
printWriter.close();
System.out.println("第 " + (index + 1) + " 个文件 " + absolutepath +
" 已成功输出到 " + outPath + "\\" + filename);
} catch (Exception e) {
e.printStackTrace();
}
}
}

作者:itmyhome

Java遍历目录下全部文件并替换指定字符串的更多相关文章

  1. Java精选笔记_IO流【File(文件)类、遍历目录下的文件、删除文件及目录】

    File(文件)类 File类用于封装一个路径,该路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径 File类内部封装的路径可以指向一个文件,也可以指向一个目录,在使用File ...

  2. Python遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例

    遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例: #-*- encoding: utf-8 -*- __author__ = 'liudong' import linecache,sys ...

  3. (实用篇)PHP不用递归遍历目录下所有文件的代码

    <?php /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ fu ...

  4. Linux和Windows的遍历目录下所有文件的方法对比

    首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...

  5. linux替换目录下所有文件中的某字符串

    linux替换目录下所有文件中的某字符串 比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: sed -i "s/zhangsan/lisi/g&quo ...

  6. PHP遍历目录下的文件夹和文件 以及遍历文件下内容

    1.遍历目录下的文件夹和文件: public function bianli1($dir) { $files = array(); if($head = opendir($dir)) { while( ...

  7. PHP删除目录及目录下所有文件或删除指定文件

    PHP删除目录及目录下所有文件或删除指定文件 <?php header("content-type:text/html;charset=utf-8"); /** * 删除目录 ...

  8. Python递归遍历目录下所有文件

    #自定义函数: import ospath="D:\\Temp_del\\a"def gci (path): """this is a stateme ...

  9. shell编程--遍历目录下的文件

    假定目录text下有如下文件      目录:dir_1.dir_2.dir_3 文件:text_1.text_2 遍历目录下所有的文件是目录还是文件 if -- if类型: #!bin/sh for ...

随机推荐

  1. js 快捷键设置

    function hotkey() { var a=window.event.keyCode; if((a==65)&&(event.ctrlKey)) { alert("你 ...

  2. 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

  3. C++输入流

    输出流基本概念  输出流定义在头文件中.大部分程序都会包含头文件,这个头文件又包含了输入流和输出流头文件.头文件还声明了标准控制台输出流cout.  使用输出流的最简单的方法是使用<<运算 ...

  4. 八 rowkey设计 几种方法

    简单来讲,rowkey就是 KeyValue 中的key     rowkey设计之 尽量散列设计 RowKey         如第三部分第六中讲到,如果数据都是有序的存储到一个特定的范围内,将会存 ...

  5. Codeforces 344A Magnets

    Description Mad scientist Mike entertains himself by arranging rows of dominoes. He doesn't need dom ...

  6. 小米开源便签Notes-源码研究(1)-导出功能整体思路

    NotesListActivity是入口Activity. 响应菜单事件,我的手机是"左键菜单".如果菜单项的ID是"R.id.menu_export_text" ...

  7. OpenJDK源码研究笔记(十一):浅析Javac编译过程中的抽象语法树(IfElse,While,Switch等语句的抽象和封装)

    浅析OpenJDK源码编译器Javac的语法树包com.sun.source.tree. 抽象语法树,是编译原理中的经典问题,有点难,本文只是随便写写. 0.赋值语句 public interface ...

  8. Spring MVC学习总结(5)——SpringMVC项目关于安全的一些配置与实现方式

    目前越来越多的应用和网站,开始注重安全性的问题,关于我们的web项目的几个安全知识点,不得不讲解一下,这里我主要讲述关于tomcat如何支持HTTPS连接访问,RSA公钥和私钥的制作.这个对于我们整个 ...

  9. leetcode: Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  10. 数据持久化(六)之Using CoreData with MagicalRecord

    第五节里面,我介绍了CoreData的配置和主要的增删改查,可能非常多人会认为用它真繁琐.这里,我再介绍网上大神对它进行了人性化封装的第三方MagicalRecord,正如FMDB对sqlite进行了 ...