java解析读取.rtf格式文档

rtf是开源格式,同时可通过Microsoft Office打开,那么怎么利用java读取.rtf格式的文档呢?

package jichu.test_simple;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.Date;

public class OperatorRTF {

    public String strToRtf(String content){

        char[] digital = "0123456789ABCDEF".toCharArray();

        StringBuffer sb = new StringBuffer("");

        byte[] bs = content.getBytes();

        int bit;

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

            bit = (bs[i] & 0x0f0)
                    >> 4;

            sb.append("\\'");

            sb.append(digital[bit]);

            bit = bs[i] & 0x0f;

            sb.append(digital[bit]);

        }

        return sb.toString();

    }

    public String replaceRTF(String content,String replacecontent,int
            flag){

        String rc = strToRtf(replacecontent);

        String target = "";

        if(flag==0){

            target = content.replace("$timetop$",rc);

        }

        if(flag==1){

            target = content.replace("$info$",rc);

        }

        if(flag==2){

            target = content.replace("$idea$",rc);

        }

        if(flag==3){

            target = content.replace("$advice$",rc);

        }

        if(flag==4){

            target = content.replace("$infosend$",rc);

        }

        return target;

    }

    public String getSavePath() {

        String path = "C:\\YQ";

        File fDirecotry = new File(path);

        if (!fDirecotry.exists()) {

            fDirecotry.mkdirs();

        }

        return path;

    }

    public String ToSBC(String input){

        char[] c =
                input.toCharArray();

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

            if (c[i] == 32){

                c[i] = (char) 12288;

                continue;

            }

            if (c[i] < 127){

                c[i] = (char) (c[i] + 65248);

            }

        }

        return new
                String(c);

    }

    public void rgModel(String username, String content) {

// TODO Auto-generated method stub

        Date current=new Date();

        SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        String targetname = sdf.format(current).substring(11,13) + "时";

        targetname += sdf.format(current).substring(14,16) + "分";

        targetname += sdf.format(current).substring(17,19) + "秒";

        targetname += "_" + username +"_记录.rtf";

        String strpath = getSavePath();

        String sourname = strpath+"\\"+"模板.rtf";

        String sourcecontent = "";

        InputStream ins = null;

        try{

            ins = new FileInputStream(sourname);

            byte[] b = new byte[1024];

            if (ins == null) {

                System.out.println("源模板文件不存在");

            }

            int bytesRead = 0;

            while (true) {

                bytesRead = ins.read(b, 0, 1024); // return final read bytes counts

                if(bytesRead == -1) {// end of InputStream

                    System.out.println("读取模板文件结束");

                    break;

                }

                sourcecontent += new String(b, 0, bytesRead); // convert to string using bytes

            }

        }catch(Exception e){

            e.printStackTrace();

        }

        String targetcontent = "";

        String array[] = content.split("~");

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

            if(i==0){

                targetcontent = replaceRTF(sourcecontent, array[i], i);

            }else{

                targetcontent = replaceRTF(targetcontent, array[i], i);

            }

        }

        try {

            FileWriter fw = new FileWriter(getSavePath()+"\\" +
                    targetname,true);

            PrintWriter out = new PrintWriter(fw);

            if(targetcontent.equals("")||targetcontent==""){

                out.println(sourcecontent);

            }else{

                out.println(targetcontent);

            }

            out.close();

            fw.close();

            System.out.println(getSavePath()+" 该目录下生成文件" +
                    targetname + " 成功");

        } catch (IOException e) {

// TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    public static void main(String[] args) {

// TODO Auto-generated method stub

        OperatorRTF oRTF = new OperatorRTF();

        String content =
                "2008年10月12日9时-2008年10月12日6时";

        oRTF.rgModel("cheney",content);

    }

}

注意:

1、需要在C盘目录下新建YQ目录,并新建"模板.rtf"文档,文档内容和格式可以任意;

2、运行后会在同目录下生成一份完全相同的文档;

3、可参考:https://zhidao.baidu.com/question/1177571128006194739.html

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值