RTF,全称是“富文本格式“,它便于在应用程序之间轻松的转换文本和图形。想了解RTF文件基本格式及相关可以点击这里。

需要注意的是,在RTF文件中,对于占双字节的中文,都是用单字节的ASCII字符表示,例如文本“宋体ABC”应该表示为:\'cb\'ce\'cc\'e5ABC,

这种编码我们称之为“汉字机内码”,简称“内码”。把国标码的汉字代码中的区码与位码分别换算为16进制数,然后再分别加上十六进制数80,

即为该汉字的机内码。由于内码的编码方式,所以我们最好在读取RTF文件流的时候将两个字节合并成单个16进制字符,然后在write的时候

将其转换成unicode编码,才能显示成中文字符。

以下有示例代码仅供参考:

(注意:这里只解析中文字符,对于单字节字符由于不是内码方式编码,所以是读取不到的)

package jj.RTF;

/**

* 解析RTF文件

* @author jj

*

*/

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.List;

public class TestParseRTF {

private static String filePath = "E:/testRTF.rtf";

private static List buffer;

public static void main(String[] args) throws Exception {

readFile();

parseRTF();

//printIns();

}

/**

* 将内码转成16进制编码

* @throws IOException

*/

public static void readFile() throws IOException {

InputStream in = new FileInputStream(new File(filePath));

int ch;

buffer = new ArrayList();

while((ch=in.read()) > 0) {

if (ch == '\\') {

ch = in.read();

}//这种形式的都是双字节字符

if (ch == '\''){

char ch1 = (char) in.read();

char ch2 = (char) in.read();

// ']'或'^'

if (ch1 == '9' && (ch2 == '3' || ch2 == '4')) {

}

//将两个十进制的数,合并转变成16进制

/**98--11

* 99--12

* 合成11*16+12=188

*/

ch = Character.digit(ch1,16)*16 + Character.digit(ch2,16);

buffer.add((char) ch);

}

}

}

/**

* 将16进制编码字符转成unicode编码的字符,并显示成中文字符串

* @throws UnsupportedEncodingException

*/

public static void parseRTF() throws UnsupportedEncodingException {

byte[]byteArr = new byte[buffer.size()];

for(int i = 0;i < buffer.size();i++) {

char ch = buffer.get(i);

if (ch < 0x80) {

byteArr[i] = (byte)ch;

} else if (ch < '\u00FF') {

char a = toHex(ch / 16);

char b = toHex(ch % 16);

String t = "" + a + b;

int hb = Integer.parseInt(t, 16);

byteArr[i] = (byte)hb;

}

}

System.out.println(new String(byteArr));

}

public static char toHex(int ch) {

if (ch < 10) {

return (char) ('0' + ch);

} else {

return (char) ('a' + ch - 10);

}

}

// 16进制字符转成中文字符

public static String hexToStringGBK(String s) {

byte[] baKeyword = new byte[s.length() / 2];

for (int i = 0; i < baKeyword.length; i++) {

try {

baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));

} catch (Exception e) {

e.printStackTrace();

return "";

}

}

try {

s = new String(baKeyword, "GBK");// UTF-16le:Not

} catch (Exception e1) {

e1.printStackTrace();

return "";

}

return s;

}//查看RTF文件原始编码字符

public static void printIns() throws IOException {

InputStream in = new FileInputStream(new File(filePath));

int ch;

while((ch=in.read()) > 0) {

System.out.print((char)ch);

}

}

}

程序运行结果:

宋体宋体}¨·ˇˉā薄谩ⅰ!ā怠贰埂弧俊场剑。ⅲВ海唬浚荩啵閧·‘“〈《「『【〔〖(.[{£¥这是一首简单的小情歌

(注:“这是一首简单的小情歌”是rtf文本内容) 推荐这里的文件流使用PushbackInputStream,即回退输入流(虽然我没用。。),这种流允许程序可以读取到特定字符。

想了解可点击回退输入流

至于完成一个RTF解析器,还是挺复杂的。

java 读取rtf字节_JAVA读取RTF文档相关推荐

  1. java doc转图片_Java 将word文档转换为PNG、XPS、RTF等格式

    在日常办公中,Word是一种很好的文档排版工具.在Word创建好文档后, 我们常常需要将其保存为PDF.图片或其他格式.本文就将通过使用Java程序来演示如何将Word文档转换为PNG.XPS.RTF ...

  2. java合并excel文件_Java 合并Excel文档

    在日常使用Excel软件办公时,通常会产生很多文档.当我们需对其中的数据进行整理和统计时,对文档进行合并处理将能够大大提高操作效率.一般文档合并可分为两种情况:一是将同一个Excel文档内多张工作表的 ...

  3. java word添加图片_Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...

  4. java word 颜色设置_Java 给Word文档添加背景颜色

    前言 当我们制作好Word文档后,想要让枯燥乏味的文本显得有活力,或是想高亮显示文档中指定的段落或文字,此时我们可以通过为整个文档或某特定文字/段落添加背景色的形式来实现.本文将使用Free Spir ...

  5. java生成world文件_Java导出World文档(入门)

    第一步就是将World文档里面需要从数据库填充的部分用占位符替换 第二步:就是将此文档保存为Xml格式 第三步:将其放在resource目录下,并选中此文件,右键点击properties属性,将其编码 ...

  6. java 生成纯色图片_Java 给PDF文档设置背景色(纯色、背景图片)

    import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; import java.awt.*; public class ...

  7. java 加背景颜色_Java 给Word文档添加背景颜色

    前言 当我们制作好Word文档后,想要让枯燥乏味的文本显得有活力,或是想高亮显示文档中指定的段落或文字,此时我们可以通过为整个文档或某特定文字/段落添加背景色的形式来实现.本文将使用Free Spir ...

  8. java word替换图片_Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...

  9. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  10. java word文档生成_java生成word文档

    java生成word文档有多种方式: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...

最新文章

  1. 【古法炮制】最原始的解决JAVA接口跨域的问题
  2. 测试ATS对某个特定域名下文件处理效果的方法
  3. Linux下HOOK动态链接库中API的方法
  4. 【Codeforces】 2A - Winner (map)
  5. 周立功-成功心法(2):通过讲故事营销自己
  6. kubernetes相关概念
  7. 曾鸣:未来十年,将确定智能商业的格局|干货
  8. Go 函数的 Map 型参数,会发生扩容后指向不同底层内存的事儿吗?
  9. 【每日算法Day 79】所有人都会做的入门题,但是能看出你的代码能力!
  10. 【mud】xyj450里的toy下的buwawa脚本问题
  11. 抖音上超火系列的透明头像是怎么弄的?操作原来如此简单
  12. 第二十天: Linux文件管理+Linux备份压缩+网络与磁盘管理+shell与安装
  13. ASP.NET和ASP的区别?
  14. rs232串口通讯模块 - Delphi编程
  15. 转专业计算机的面试自我介绍,转专业面试自我介绍
  16. C51单片机实验——LCD 1602液晶显示器
  17. App ID注册地址
  18. C语言生成BMP文件
  19. springboot幼儿园书刊信息管理系统毕业设计源码141858
  20. 4路编码器脉冲计数器,转速测量,8路DO,Modbus TCP数据采集模块

热门文章

  1. hello.java_hello java !
  2. css怎么写仿粗体,在CSS中字体加粗要怎么做?
  3. 百度网盘链接提取码接口实现
  4. 解锁前端面试体系核心攻略.pdf
  5. PDF加密如何解除?教你2个PDF解密方法
  6. 实验室常用质控规则介绍
  7. PHP微信公众号服务器配置
  8. 第五章:腾讯云有哪些产品
  9. 《数据结构复习》扩展线性链表的广义表
  10. JanusGraph对于Gremlin查询语言的介绍