应用场景:比方有一个深层次的文件目录结构,如: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. 结合Vue 的滚动底部加载

    项目手机端分页跳转不理想,自己做了一个滚动加载的一个Demo 核心Dom结构 <body> <div id="Content"> <div> & ...

  2. 【SRM 716 DIV 1 A】 ConstructLCS

    Problem Statement A string S is a subsequence of a string T if we can obtain S from T by erasing som ...

  3. 【CS Round #36 (Div. 2 only) A】Bicycle Rental

    [题目链接]:https://csacademy.com/contest/round-36/task/bicycle-rental/ [题意] 让你从n辆车中选一辆车; 每一辆车有3个属性 1.到达车 ...

  4. gcc 生成动态链接库

    http://blog.csdn.net/ngvjai/article/details/8520840 Linux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows ...

  5. LiquiBase注释

    LiquiBase的注释 <createTable tableName="Role_" remarks="角色表">             < ...

  6. 【VBA研究】用VBA取得EXCEL随意列有效行数

    作者:iamlaosong 用VBA对Excel文件进行处理的时候,keyword段的列号编程时往往是不知道的.须要通过參数设定才干知道,因此.我们编程的时候,就不能用这种语句取有效行数: linen ...

  7. 思科E3200 路由器 DD-WRT 设置花生壳和3322.org动态域名(DDNS)

    花生壳设置(已測试) ddns.oray.com:80 username   aaaa password bbbb 主机名   abc.gicp.net URL       /ph/update?ho ...

  8. double long float类型读入读出 double取模 fmod

    The library of fmod is #include <cmath> #include<cstdio> #include<cstdlib> #includ ...

  9. Ionic2集成ngx-datatable,ng2-tree第三方控件.md

    1. 基本环境配置 1.1. 命令安装相应的依赖 1.2. 在Module定义中引入对应Module 1.3. 引入对应的CSS 2. 简单使用示例验证是否集成成功 2.1. ngx-datatabl ...

  10. Linux下CD/DVD刻录软件

    1.Brasero是一款CD/DVD刻录软件,Gnome桌面环境默认自带,支持单次写入数据DVD和任何类型的CD,并且能够将光盘镜像写入到硬盘,其图形化的操作界面使用户能够轻松而快速的在Linux下烧 ...