1.相关知识
所谓命令行参数,说白了其实就是在编译好之后,运行程序时需要带入参数,例如:
java calssName 参数1 参数2……
这里其实我们输入的参数存储在args[0],args[1],args[2]……中,即:
java className args[0] args[1] args[2]……
代码的主函数中,String[] args 这个字符串数组是保存运行main函数时输入的参数的。
2.代码及注释
在了解了命令行参数之后,我们可以完成通过命令行参数替换.txt文本文档中的指定文字,关于文本处理中的文字替换的内容可以参见我的另两篇文章:
1、Java ,使用String类处理定长的字符串(组合、转换、替换、分隔、字符串与数组之间的转换)
2、Java—文件的读、写操作
代码:
/*功能:文本替换
*输入4个参数:源文件(source_file)、目标文件(target_file)、需要改的字符串(old_string)、新的字符串(new_string)
*注:源文件是需要被改的文件,目标文件是替换结束后用于存储新文本的文件
*输出:目标文件(target_file)
*2018.11.4
*/
import java.io.File;//引入File类
import java.io.PrintWriter;//引入PrintWriter类,用于写数据入文件
import java.util.Scanner;//引入Scanner类,用于从文件读数据
class replace{
public static void main(String[] args) throws Exception{
//输入的四个参数存储在数组arg[]中
File source_file = new File(args[0]);
//System.out.println(args[0]);
//检测原文件是否存在
if (!source_file.exists()) {
System.out.println("源文件"+args[0]+"不存在");
System.exit(0);
}
File target_file = new File(args[1]);//第二个参数
//检测目标文件是否已经存在
if (target_file.exists()) {
System.out.println("目标文件"+args[1]+"已经存在");
System.exit(0);
}
//读和写对象
Scanner input = new Scanner(source_file);//读取源文件对象
PrintWriter output = new PrintWriter(target_file);//写入目标文件的对象
while(input.hasNext()){//判断是否还有可读的内容
String str1 = input.nextLine();//读取源文件的内容
String str2 = str1.replaceAll(args[2],args[3]);//把文本中的所有的第三个参数替换成第四个参数
output.println(str2);//替换后的新的文内容写入到目标文件
}
input.close();//.close()方法关闭文件,释放被文件占用的资源
output.close();//.close()方法关闭文件,如果不关闭,数据不能保存在文件中
}
}
3.运行
运行时,需要输入4个参数,分别是源文件、目标文件、旧字符串、新字符串,即:
java replace 源文件 目标文件 旧字符串 新字符串
其中源文件要存在,并且在当前文件夹下:
源文件内容:
执行代码:
结果:
生成新的目标文件内容:
若源文件不在当前文件夹,例如在上一级路径:
那么,执行代码示例:
输入的第一个参数相当于带路径的源文件。