`
zhangcxy
  • 浏览: 41315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java文本内指定字符位置添加内容

    博客分类:
  • JAVA
阅读更多
package com.zhang.stream;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
import java.util.LinkedList;
import java.util.List;

import com.zhang.common.Common;

/** 
* @Package com.zhang.stream 
* @ClassName: PubFileUtil 
* @Description: 读写有风险,操作需谨慎(注意备份)  
* @author: ZhangSongbo
* @date 2014-9-28 上午11:47:42 
* @version V1.0 
*/ 
public class PubFileUtil {

	private static String filePath = "d:\\EduInfo.java";
        public static final String RN = "\r\n";//可替换Common.RN

	/**
	 * @Title: readFileList
	 * @Description: 所给目录下的所有文件名称集合
	 * @param @param filepath 文件路径
	 * @param @return   返回当前路径下所有文件名称集合
	 * @return List<String>   
	 * @throws IOException
	 */
	public static List<String> readFileList(String filepath) throws IOException {
		List<String> list = new LinkedList<String>();
		try {
			File file = new File(filepath);
			if (!file.isDirectory()) {
				System.out.println("文件");
				System.out.println("path=" + file.getPath());
				System.out.println("absolutepath=" + file.getAbsolutePath());
				System.out.println("name=" + file.getName());

			} else if (file.isDirectory()) {
				System.out.println("文件夹");
				String[] filelist = file.list();
				for (int i = 0; i < filelist.length; i++) {
					File readfile = new File(filepath + "\\" + filelist[i]);
					if (!readfile.isDirectory()) {
						list.add(readfile.getName());
					} else if (readfile.isDirectory()) {
						readFileList(filepath + "\\" + filelist[i]);
						System.out.println(filepath + "\\" + filelist[i]);
					}
				}

			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println(list);
		return list;

	}

	/**
	 * @Title: randomAccessWrite
	 * @Description: 随机流写操作
	 * @param @param filePath 文件路径
	 * @param @param content  追加的内容 
	 * @return void   
	 * @throws IOException
	 */
	public static void randomAccessWrite(String filePath, String content) {
		File fileName = new File(filePath);
		RandomAccessFile randomFile = null;
		try {
			// 打开一个随机访问文件流,按读写方式
			randomFile = new RandomAccessFile(fileName, "rw");
			// 文件长度,字节数
			long fileLength = randomFile.length();
			// 将写文件指针移到文件尾。
			// byte[] buffer = new byte[1024];
			randomFile.seek(fileLength);
			randomFile.write(content.getBytes());
			System.out.println("操作完成!");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (randomFile != null) {
				try {
					randomFile.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * @Title: findLines
	 * @Description: TODO
	 * @param @param filePath 文件路径
	 * @param @param context 查找的字符串
	 * @param @return 包含搜索的字符串的行
	 * @param @throws IOException   
	 * @return List<String>   
	 */
	public static List<String> findLines(String filePath, String context) throws IOException {
		List<String> list = new LinkedList<String>();
		BufferedReader read = new BufferedReader(new FileReader(filePath));
		String str = null;
		while ((str = read.readLine()) != null) {
			if (str.indexOf(context) != -1) {
				list.add(str);
			}
		}
		read.close();
		return list;
	}

	/**
	 * @Title: findParagraph
	 * @Description: 根据查找字符串划分内容(第一个符合的字符串对象有效)
	 * @param @param filePath 文件路径
	 * @param @param context 查找的字符串
	 * @param @return List<String>
	 * @param @throws IOException   
	 * @return List<String>   
	 * @throws
	 */
	public static List<String> findParagraph(String filePath, String context) throws IOException {
		BufferedReader read = new BufferedReader(new FileReader(filePath));
		List<String> list = new LinkedList<String>();
		String paragraphHead = "";
		String paragraphEnd = "";
		String line = "";
		int index = 0;
		int lineNum=1;
		while ((line = read.readLine()) != null) {
			if (index == 0) {
				paragraphHead += (line + Common.RN);
			}
			if (line.indexOf(context) != -1 && index == 0) {
				System.out.println("行号:"+lineNum+",当前行内容: "+line);
				list.add(paragraphHead);
				index++;
				continue;
			}
			if (index > 0) {
				paragraphEnd += (line + Common.RN);
			}
			lineNum++;
		}
		list.add(paragraphEnd);
		read.close();
		return list;
	}

	/**
	 * @Title: writeFile
	 * @Description: TODO
	 * @param @param filePath 文件路径名称
	 * @param @param context要写入的文件内容
	 * @param @param codeType编码格式(默认为utf-8)
	 * @param @throws IOException   
	 * @return void   
	 * @throws IOException
	 */
	public static void writeFile(String filePath, String context, String codeType) throws IOException {
		File f = new File(filePath);
		InputStreamReader read = null;
		if (codeType != null && !codeType.trim().equals("")) {
			read = new InputStreamReader(new FileInputStream(f), codeType);
		} else {
			read = new InputStreamReader(new FileInputStream(f), "UTF-8");
		}
		BufferedReader reader = new BufferedReader(read);
		String line = "";
		String str = "";
		while ((line = reader.readLine()) != null) {
			str += (line + Common.RN);
		}
		OutputStream out = new FileOutputStream(f);
		byte[] bt = context.getBytes();
		out.write(bt);
		out.flush();
		out.close();
		System.out.println("读取文件结束!" + Common.RN + "开始向文件开始追加内容" + Common.RN + str);
		randomAccessWrite(filePath, str);

	}

	/**
	 * @Title: writeParagraph
	 * @Description: TODO
	 * @param @param filePath 路径
	 * @param @param context 要查找的字符串
	 * @param @param wcontext要写入的内容
	 * @param @param codeType 编码格式(默认utf-8)
	 * @param @throws IOException   
	 * @return void   
	 * @throws
	 */
	public static void writeParagraph(String filePath, String context, String wcontext, String codeType) throws IOException {
		File fileName = new File(filePath);
		List<String> list = findParagraph(filePath, context);
		RandomAccessFile randomFile = null;
		OutputStreamWriter write = null;
		if (codeType != null && !codeType.trim().equals("")) {
			write = new OutputStreamWriter(new FileOutputStream(fileName), codeType);
		} else {
			write = new OutputStreamWriter(new FileOutputStream(fileName), "utf-8");
		}
		//清空文件内容
		write.write("");
		write.close();
		try {
			// 打开一个随机访问文件流,按读写方式
			randomFile = new RandomAccessFile(fileName, "rw");
			int index=0;
			for (int i = 0; i < list.size(); i++) {
				if (index==0) {
					randomFile.write(list.get(i).getBytes());
					randomFile.write((wcontext + Common.RN).getBytes());
				}
				if (index>0) {
					randomFile.write(list.get(i).getBytes());
				}
				index++;
			}
			System.out.println("操作完成!");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (randomFile != null) {
				try {
					randomFile.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	public static void main(String[] args) throws IOException {
		long startTime = System.currentTimeMillis();
		writeParagraph( filePath,  "{",  "做人要像陈冠希,随时带好照相机!",  null);
		long endTime= System.currentTimeMillis();
		System.out.println("time:"+(endTime-startTime)+"ms");
		//readFileList("D:\\Workspaces\\dao\\src");
	}

}

 

分享到:
评论

相关推荐

    Java读取PDF查找指定文字位置,并添加悬浮图片(文档签字/盖章)

    对pdf文件进行读取,根据传入的文字去寻找指定位置信息,根据位置信息添加图片,其中样式格式可自定义,具体可查看jar包的操作文档,地址可百度。实现签字或者盖章操作,文件中包括源码和架包。

    一次查找替换文本中多个字符串(添加还原功能)

    一个java开发的小工具,一次性查找替换文本中多个字符串。 进行了优化: 1、不使用弹出式提示查找数据 2、添加替换还原功能

    Java编写的文本编辑器,实现了基本功能

    文本编辑器 实现了打开、保存、撤销、字形组合框、颜色单选框、字数统计、行数统计、自动换行、在指定位置插入字符、查找、替换、全选、删除、……………… 程序可供初学者学习使用,主要是简单,本程序纯属自己课堂...

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    Java项目源码之文本编辑器的实现.rar

    文本处理:使用Java提供的字符串处理功能,实现文本编辑和查找替换功能。 语法高亮:通过正则表达式匹配文本中的关键词,并设置相应的文本颜色实现语法高亮显示。 扩展性与定制性: 插件支持:设计插件接口,允许...

    JAVA_API1.6文档(中文)

    java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户...

    java源码包4

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包3

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包2

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java jdk实列宝典 光盘源代码

    滚动的消息,实现一个简单的动画,具有滚动效果的文本消息RollingMessage.java; 三维弹球,BouncingB.java; 贪吃蛇游戏SnakeModel.java; java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频...

    Java 1.6 API 中文 New

    java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户界面...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    java api最新7.0

    java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户界面...

    JavaAPI1.6中文chm文档 part1

    java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户...

    java开源包11

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包6

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包9

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

Global site tag (gtag.js) - Google Analytics