Java之递归遍历目录,修改指定文件的指定内容

EditProperties.java

 1 package PropertiesOperation.Edit;
 2
 3 import java.io.File;
 4
 5 /**
 6  * 替换指定Porpoerties文件中的指定内容
 7  * 三个参数:
 8  * filePath:存放properties文件的目录
 9  * srcStr:需要替换的字符串
10  * desStr:用于替换的字符串
11  * */
12 public class EditProperties {
13     private static int num = 0; // 计数变量
14     public static void main(String[] args) {
15         String filePath = "C:\\workspace\\work\\ShanDianDaiTools\\src\\main\\" +
16                 "resource\\接口测试\\app启动次数统计接口";
17         String srcStr = "bd.test.com:8888";   //需要替换的字符串
18         String desStr = "10.15.1.200:8580";   //用于替换的字符串
19
20         editProperties(filePath, srcStr, desStr);
21         System.out.println("总共文件数:" + num);
22     }
23
24     public static void editProperties(String filePath, String srcStr, String desStr) {
25         File file = new File(filePath);
26 //        处理目录情况
27         if (file.isDirectory()) {
28             File[] subFiles = file.listFiles();
29             for (File subFile : subFiles) {
30 //                子文件如果是目录进行递归
31                 if (subFile.isDirectory()) {
32                     editProperties(subFile.getAbsolutePath(), srcStr, desStr);
33                 } else {
34 //                    子文件如果是文件,通过后缀名进行过滤
35                     if (subFile.getName().endsWith(".properties")) {
36                         System.out.println(subFile.getAbsolutePath());
37                         EditFile.propertiesChange(subFile.getAbsolutePath(), srcStr, desStr);
38                         num++;
39                     } else {
40                         continue;
41                     }
42                 }
43             }
44         } else {
45             // 处理单个文件情况
46             if (file.getName().endsWith(".properties")) {
47                 System.out.println(file.getAbsolutePath());
48                 EditFile.propertiesChange(file.getAbsolutePath(), srcStr, desStr);
49                 num++;
50             }
51         }
52     }
53 }

EditFile.java

  1 package PropertiesOperation.Edit;
  2
  3 import java.io.*;
  4 import java.util.ArrayList;
  5 import java.util.List;
  6
  7 /**
  8  * 修改文件中的内容* 两种情况:1.修改文件中的指定内容;2.读取文件并修改指定内容,复制到另一个文件中
  9  * 场景举例:替换properties文件中的ip和端口
 10  */
 11 public class EditFile {
 12     /**
 13      * 1.修改文件中的指定内容
 14      * filePath:文件路径
 15      * srcStr:需要替换的字符串
 16      * desStr:替换成的字符串
 17      */
 18     public static void propertiesChange(String filePath, String srcStr, String desStr) {
 19         //字符流
 20         FileReader fr = null;
 21         FileWriter fw = null;
 22         //缓冲流
 23         BufferedReader br = null;
 24         BufferedWriter bw = null;
 25
 26         List list = new ArrayList<>();
 27         //读取文件内容保证在list中
 28         try {
 29             fr = new FileReader(new File(filePath));
 30             br = new BufferedReader(fr);   //扩容,类似加水管
 31             String line = br.readLine();    //逐行复制
 32             while (line != null) {
 33                 //修改指定内容
 34                 if (line.contains(srcStr)) {
 35                     line = line.replace(srcStr, desStr);
 36                 }
 37                 list.add(line);
 38                 line = br.readLine();
 39             }
 40         } catch (IOException e) {
 41             e.printStackTrace();
 42         } finally {
 43             try {
 44                 //关闭流,顺序与打开相反
 45                 br.close();
 46                 fr.close();
 47             } catch (IOException e) {
 48                 e.printStackTrace();
 49             }
 50         }
 51
 52         //将list中内容输出到原文件中
 53         try {
 54             fw = new FileWriter(filePath);
 55             bw = new BufferedWriter(fw);
 56             for (Object s : list) {
 57                 bw.write((String) s);
 58                 bw.newLine();  //换行输出
 59             }
 60             System.out.println("文件修改成功!");
 61         } catch (IOException e) {
 62             e.printStackTrace();
 63         } finally {
 64             try {
 65                 //关闭流,顺序与打开相反
 66                 bw.close();
 67                 fw.close();
 68             } catch (IOException e) {
 69                 e.printStackTrace();
 70             }
 71         }
 72     }
 73
 74     /**
 75      * 2.读取文件并修改指定内容,复制到另一个文件中
 76      * inputPath:修改的源文件
 77      * outputPath:修改后输出的文件路径
 78      * srcStr:需要替换的字符串
 79      * desStr:替换成的字符串
 80      */
 81     public static void propertiesChange(String inputPath, String outputPath, String srcStr, String desStr) {
 82         //字符流
 83         FileReader fr = null;
 84         FileWriter fw = null;
 85         //缓冲流
 86         BufferedReader br = null;
 87         BufferedWriter bw = null;
 88
 89         try {
 90             fr = new FileReader(new File(inputPath));
 91             br = new BufferedReader(fr);   //扩容,类似加水管
 92             fw = new FileWriter(outputPath);
 93             bw = new BufferedWriter(fw);
 94
 95             String line = br.readLine();    //逐行复制
 96             while (line != null) {
 97                 if (line.contains(srcStr)) {
 98                     line = line.replace(srcStr, desStr);
 99                 }
100                 bw.write(line);
101                 bw.newLine();  //换行输出
102                 line = br.readLine();
103             }
104             System.out.println("文件修改成功!");
105         } catch (IOException e) {
106             e.printStackTrace();
107         } finally {
108             try {
109                 //关闭流,顺序与打开相反
110                 bw.close();
111                 br.close();
112                 fw.close();
113                 fr.close();
114             } catch (IOException e) {
115                 e.printStackTrace();
116             }
117         }
118     }
119
120 }
时间: 2024-10-07 17:23:57

Java之递归遍历目录,修改指定文件的指定内容的相关文章

java递归遍历目录获取所有文件及目录方案

本文提供一份递归遍历目录获取所有文件及目录的源代码: import java.io.File; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2019/2/10. */ public class TestWalkDir { static class FileComponent { File curFile; List<FileComponent> fileComponen

Java 之递归遍历目录

Java 之递归遍历目录 一.内容 输出指定目录(文件夹)下的所有文件(包括目录)的绝对路径 二.源代码:RecursiveListDirectory.java 1 package cn.com.zfc.day016; 2 3 import java.io.File; 4 5 /** 6 * @describe 递归遍历目录 7 * @author zfc 8 * @date 2018年1月1日 上午8:44:55 9 */ 10 public class RecursiveListDirect

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

#自定义函数: import ospath="D:\\Temp_del\\a" def gci (path): parents = os.listdir(path) for parent in parents: child = os.path.join(path,parent) #print(child) if os.path.isdir(child): gci(child) # print(child) else: print(child) gci(path) #使用os.walk方

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

<?php /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ function scanfiles($dir) { if (! is_dir ( $dir )) return array (); // 兼容各操作系统 $dir = rtrim ( str_replace ( '\\', '/', $dir ), '/' ) . '/'; // 栈,默认值为传入的目录 $

[转载]Python递归遍历目录下所有文件

#自定义函数: import ospath="D:\\Temp_del\\a"def gci (path):"""this is a statement"""parents = os.listdir(path)for parent in parents:child = os.path.join(path,parent)#print(child)if os.path.isdir(child):gci(child)# print(

Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。

题目: 遍历出aaa文件夹下的文件 首先分析思路: 1.首先判断这个文件夹是否为文件,通过isFile()函数可以判断是否为文件. 2.然后通过isDirectory判断是否为目录. 3.如果是目录就使用递归遍历目录 代码如下: 1 import java.io.File; 2 3 public class ZuoYe { 4 public static void main(String[] args) { 5 //创建file对象 6 File f=new File("d://新建文件夹&qu

Java非递归遍历树算法---以遍历文件为例

在网上看到的算法,跟之前自己写的一个非遍历算法类似,先记录下来. 非递归: import java.io.File; import java.util.LinkedList; public class FileSystem { public static void main(String[] args) { long a = System.currentTimeMillis(); LinkedList list = new LinkedList(); File dir = new File("c

linux目录操作及递归遍历目录

目录相关函数介绍 //mkdir 函数创建目录 #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); //rmdir 删除目录 #include <unistd.h> int rmdir(const char *pathname); //dopendir/fdopendir  //打开目录 DIR是一个结构体,是一个内部结构,用来存储读取目录的

Makefile 递归遍历目录(含子目录) 编译动态库

这里推荐一本书,Makefile手册,本人正在学习,多交流~ 一.统一编译所有子目录的文件 直接上Makefile内容了, AR=arLD=ldCC=gcc CFLAGS = -O2 -Wall  -I./Test \                -I./Test/Test1 \ #注:"\"后面不能有空格,并且该句写完后最好有个换行 #注释部分推荐在单独的一行编写 #动态库需要 -fPIC  -shared SOFLAGS = -O2 -fPIC -sharedTARGET = .