替换文件里的相关单词(一)之文件类型为txt

首先说一下详细的实现思路:

第一步:我们须要获取要改动文件的信息,我们能够通过文件的路径来获取文件的FileInputStream,即文件的输入流,然后调用InputStreamReader读取文件输入流信息,将读入的信息保存到BufferedReader(BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。)然后通过readLine()函数将流的信息读取出来,这样就完毕了第一步。我们能获取到文件的信息了

第二步:能够读取文件的信息了,我们就能够通过Matcher这类来匹配我们要替换的单词,然后用appendReplacement()来替换单词。而且保存替换后的字符串信息,

最后:将替换后的文件信息又一次打印到新的文件里去,接下来请看代码实现:

package com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author FishRoad
 * @date 2015年8月17日 下午3:04:08
 *
 */
public class Test01 {
    /**
     * 功能:Java读取txt文件的内容
     * 步骤:1:先获得文件句柄
     * 2:获得文件句柄当做是输入一个字节码流,须要对这个输入流进行读取
     * 3:读取到输入流后,须要读取生成字节流
     * 4:一行一行的输出。

readline()。

* 备注:须要考虑的是异常情况
     * @param filePath
     */
    public static void readTxtFile(String filePath){

        try {
                String encoding="GBK";
                File file=new File(filePath);
                String outStr ;
                if(file.isFile() && file.exists()){ //推断文件是否存在
                    InputStreamReader read = new InputStreamReader(
                    new FileInputStream(file),encoding);//考虑到编码格式
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTxt = null;
                    StringBuffer sb = new StringBuffer("");
                    while((lineTxt = bufferedReader.readLine()) != null){
                        System.out.println(lineTxt);
                        sb.append(lineTxt+"\r\n");
                    }
                    sb.append("What I Want to say is that you are just a good person!");
                    outStr = sb.toString();
                    //调用文件的单词替换方法
                    String changerStr = tpReplaceWord(outStr);
                    read.close();
                    FileOutputStream out = new FileOutputStream("F:/我的文件复制.txt");
                    OutputStreamWriter write = new OutputStreamWriter(out);
                    write.write(changerStr);
                    write.flush();
                    write.close();
        }else{
            System.out.println("找不到指定的文件");
        }
        } catch (Exception e) {
            System.out.println("读取文件内容出错");
            e.printStackTrace();
        }

    }

    public static String tpReplaceWord(String str) {
		/*StringBuffer strBuf = new StringBuffer();
		strBuf.append("Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(下面简称Java语言)和Java平台的总称。

\r"
				+ "由James Gosling和同事们共同研发,并在1995年正式推出。

\r"
				+ "Java最初被称为Oak。是1991年为消费类电子产品的嵌入式芯片而设计的。

\r"
				+ "1995年更名为Java,并又一次设计用于开发Internet应用程序。

\r"
				+ "用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:\r"
				+ "跨平台、动态Web、Internet计算。\r"
				+ "从此。Java被广泛接受并推动了Web的迅速发展,经常使用的浏览器均支持Javaapplet。\r"
				+ "还有一方面,Java技术也不断更新。Java自面世后就很流行,发展迅速。对C++语言形成有力冲击。\r"
				+ "在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。\r"
				+ "2010年Oracle公司收购Sun Microsystems。

\r");
		String a = strBuf.toString();*/

		// 生成Pattern对象而且编译一个简单的正則表達式"Java"
		Pattern p = Pattern.compile("Java");
		// 用Pattern类的matcher()方法生成一个Matcher对象
		Matcher m = p.matcher(str);
		StringBuffer sb = new StringBuffer();
		int i = 0;
		// 使用find()方法查找第一个匹配的对象
		boolean result = m.find();
		// 使用循环将句子里全部的Java找出并替换再将内容加到sb里
		while (result) {
			i++;
			m.appendReplacement(sb, " 呵呵 ");
			// System.out.println("第" + i + "次匹配后sb的内容是:" + sb);
			// 继续查找下一个匹配对象
			result = m.find();
		}
		// 最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里;
		m.appendTail(sb);
		System.out.println("调用m.appendTail(sb)后sb的终于内容是:\r" + sb.toString());
		return sb.toString();
	}

    public static void main(String argv[]){
    	//该文件的信息就是上面的strBuf中的关于java的信息
        String filePath = "F:\\aaaaa.txt";
//      "res/";
        readTxtFile(filePath);
    }

}

原文地址:https://www.cnblogs.com/llguanli/p/8457116.html

时间: 2024-10-06 00:53:34

替换文件里的相关单词(一)之文件类型为txt的相关文章

在类的头文件里尽量少引入其它头文件 <<Effective Objective-C>>

与C 和C++ 一样,Objective-C 也使用"头文件"(header file) 与"实现文件"(implementation file)来区隔代码.用Objective-C 语言编写"类"(class)的标准方式为:以类名做文件名称,分别创建两个文件,头文件后缀用.h,实现文件后缀用.m. 创建好一个类之后,其代码看上去例如以下所看到的: // EOCPerson.h #import <Foundation/Foundation.

替换文件中的相关单词(一)之文件类型为txt

首先说一下具体的实现思路: 第一步:我们需要获取要修改文件的信息,我们可以通过文件的路径来获取文件的FileInputStream,即文件的输入流,然后调用InputStreamReader读取文件输入流信息,将读入的信息保存到BufferedReader(BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取.)然后通过readLine()函数将流的信息读取出来,这样就完成了第一步,我们能获取到文件的信息了 第二步:能够读取文件的信息了,我们就可以

读写文件:每次读入大文件里的一行、读写.CSV文件

读文件: 传统的读法.所有读出,按行处理: fp=open("./ps.txt", "r"); alllines=fp.readlines(); fp.close(); for eachline in alllines: print eachline 推荐读取方法,使用文件迭代器 , 每次仅仅读取和显示一行.读取大文件时应该这样: fp=open("./ps.txt", "r"); for eachline in fp: pr

apk去广告工具(利用apktool去除apk文件里的广告)

基本知识 apk安装包的文件结构 以知名桌面软件“LauncherPro”为例,apk安装包文件目录: 文件目录如下: - META-INF - res - anim - color - drawable - drawable-hdpi - drawable-land - drawable-land-hdpi - drawable-mdpi - drawable-port - drawable-port-hdpi - layout - layout-land - layout-port - xm

关于新版vue-cli安装json-server在build文件里没生成出dev-server文件

今天在安装json-server时遇到一个问题,build文件里并没有生成dev-server.js文件, 开始是怀疑配置有问题,或者安装不正确,然后重新安装了两三次,还是这样,郁闷.. 通过查询资料得知,新版的vue-cli取消了dev-server.js和dev-client.js 改用webpack.dev.conf.js代替,所以 配置本地访问在webpack.dev.conf.js里配置即可 打开webpack.dev.conf.js,(在build目录下), 在const portf

Github使用.gitignore文件忽略不必要上传的文件 (转)

原文地址: https://blog.csdn.net/gjy211/article/details/51607347 常用编程语言及各种框架平台下的通用   .gitignore   文件 https://github.com/guojun007/gitignore (1).gitignore介绍 在工程实现过程中,会生成一些中间文件,或者在项目中的部分文件是不需要进行版本管理的.对于这些文件应该对于Github来讲是透明的.Github提供这种功能,可以自己指定哪些文件可以不被管理.具体方法

统计大文件里单词

转载统计大文件里,频数最高的10个单词,(C# TPL DataFlow版) 最近公司搞了一个写程序的比赛,要求从2G的文件里统计出出现频率最高的10个单词. 最开始的想法是使用字典树,后来发现字典树更适合用在找前缀上,在查找没有hash表效率高. 之后使用Hash表+DataFlow完成了功能,2G的文件处理在20秒以内(其实我有信心优化到10秒以内,但是太折腾了). 这是我的设计图: 为什么要形成那么多结果?因为我不想写锁,写锁会降低很多效率,而且也失去了线程的意义,每个线程做自己的工作,

如何在Eclipse里,有什么快捷的替换方法。把上百个jsp文件里的内容替换掉

ctrl + h 如何在Eclipse里,有什么快捷的替换方法.把上百个jsp文件里的内容替换掉,布布扣,bubuko.com

统计大文件里,频数最高的10个单词,(C# TPL DataFlow版)

最近公司搞了一个写程序的比赛,要求从2G的文件里统计出出现频率最高的10个单词. 最开始的想法是使用字典树,后来发现字典树更适合用在找前缀上,在查找没有hash表效率高. 之后使用Hash表+DataFlow完成了功能,2G的文件处理在20秒以内(其实我有信心优化到10秒以内,但是太折腾了). 这是我的设计图: 为什么要形成那么多结果?因为我不想写锁,写锁会降低很多效率,而且也失去了线程的意义,每个线程做自己的工作, 最后在把每个线程处理的结果汇总起来,这样也符合fork join 的设计. 而