java实现模板

java实现模板,第1张

不知你有没有学习javaWeb的东西,如果学过那你应该会用,主要就servlet,struct2等从后台取到数据在页面显示。这些的前提是你必须要有一个web的服务器,前台页面从服务器中的后台任务获取数据,进行展示。如果没学过javaWeb那就先学习一下吧,一个月的时间学servlet很足够。

java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估

计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过, *** 作

方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关

于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO *** 作外加编码转换即可。rtf格式文件

面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。

----- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。

----- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。

1、采用字节的形式读取rtf模板内容

2、将可变的内容字符串转为rtf编码

3、替换原文中的可变部分,形成新的rtf文档

主要程序如下:

public String bin2hex(String bin) {

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

StringBuffer sb = new StringBuffer("");

byte[] bs = bingetBytes();

int bit;

for (int i = 0; i < bslength;i++) {

bit = (bs[i] & 0x0f0)

>> 4;

sbappend("\\'");

sbappend(digital[bit]);

bit = bs[i] & 0x0f;

sbappend(digital[bit]);

}

return sbtoString();

}

public String readByteRtf(InputStream ins, String path){

String sourcecontent =

"";

try{

ins = new

FileInputStream(path);

byte[] b

= new byte[1024];

if (ins == null) {

Systemoutprintln("源模板文件不存在");

}

int bytesRead = 0;

while (true) {

bytesRead = insread(b, 0, 1024); // return final read bytes

counts

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

Systemoutprintln("读取模板文件结束");

break;

}

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

using bytes

}

}catch(Exception e){

eprintStackTrace();

}

return sourcecontent ;

}

以上为核心代码,剩余部分就是替换,从新组装java中的Stringreplace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。

运行源代码前提:

c盘创建YQ目录,将附件中"模板rtf"复制到YQ目录之下,运行OpreatorRTFjava文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录rtf

的文件。

package com;

import javaioFile;

import javaioFileInputStream;

import javaioFileWriter;

import javaioIOException;

import javaioInputStream;

import javaioPrintWriter;

import javatextSimpleDateFormat;

import javautilDate;

public class OperatorRTF {

public String strToRtf(String content){

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

StringBuffer sb = new StringBuffer("");

byte[] bs = contentgetBytes();

int bit;

for (int i = 0; i < bslength; i++) {

bit = (bs[i] & 0x0f0)

>> 4;

sbappend("\\'");

sbappend(digital[bit]);

bit = bs[i] & 0x0f;

sbappend(digital[bit]);

}

return sbtoString();

}

public String replaceRTF(String content,String replacecontent,int

flag){

String rc = strToRtf(replacecontent);

String target = "";

if(flag==0){

target = contentreplace("$timetop$",rc);

}

if(flag==1){

target = contentreplace("$info$",rc);

}

if(flag==2){

target = contentreplace("$idea$",rc);

}

if(flag==3){

target = contentreplace("$advice$",rc);

}

if(flag==4){

target = contentreplace("$infosend$",rc);

}

return target;

}

public String getSavePath() {

String path = "C:\\YQ";

File fDirecotry = new File(path);

if (!fDirecotryexists()) {

fDirecotrymkdirs();

}

return path;

}

public String ToSBC(String input){

char[] c =

inputtoCharArray();

for (int i =

0; i < clength; 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 javatextSimpleDateFormat("yyyy-MM-dd

HH:mm:ss");

String targetname = sdfformat(current)substring(11,13) + "时";

targetname += sdfformat(current)substring(14,16) + "分";

targetname += sdfformat(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) {

Systemoutprintln("源模板文件不存在");

}

int bytesRead = 0;

while (true) {

bytesRead = insread(b, 0, 1024); // return final read bytes

counts

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

Systemoutprintln("读取模板文件结束");

break;

}

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

using bytes

}

}catch(Exception e){

eprintStackTrace();

}

String targetcontent = "";

String array[] = contentsplit("~");

for(int i=0;i<arraylength;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(targetcontentequals("")||targetcontent==""){

outprintln(sourcecontent);

}else{

outprintln(targetcontent);

}

outclose();

fwclose();

Systemoutprintln(getSavePath()+" 该目录下生成文件" +

targetname + " 成功");

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

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时~我们参照检验药品的方法~我们参照检验药品的方法~我们参照检验药品的方法~我们参照检验药品的方法";

oRTFrgModel("cheney",content);

}

}

import javaioBufferedReader;

import javaioFile;

import javaioFileNotFoundException;

import javaioFileReader;

import javaioIOException;

import javautilArrayList;

import jxlSheet;

import jxlWorkbook;

import jxlreadbiffBiffException;

public static ArrayList<String> readTelExcel(String filepath) {

try {

//查询文件是否存在

File file = new File(filepath);

if (fileexists()) {

ArrayList<String> result = new ArrayList<String>();

//声明一个excel文件对象

Workbook wb = WorkbookgetWorkbook(file);

//读取每一个工作薄,你也可能用wbgetSheets()得到全部工作薄

Sheet ws = wbgetSheet(0);

if (null != ws) {

//取出所有行

int rows = wsgetRows();

for (int i = 0; i < rows; i++) {

//读取第一列中的内容

String cell = wsgetCell(0, i)getContents();

if (null != cell) {

resultadd(celltrim());

}

}

}

return result;

}

return null;

} catch (BiffException e) {

eprintStackTrace();

return null;

} catch (IndexOutOfBoundsException e) {

eprintStackTrace();

return null;

} catch (IOException e) {

eprintStackTrace();

return null;

}

}

  获取文件类型,一般的是列出目前所有的文件类型,根据表头进行相应判断,示例如下:

/

 件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分。

 头文件作为一种包含功能函数、数据接口声明的载体文件,用于保存程序的声明(declaration),而定义文件用于保存程序的实现 (implementation)。

 为了解决在用户上传文件的时候在服务器端判断文件类型的问题,故用获取文件头的方式,直接读取文件的前几个字节,来判断上传文件是否符合格式。具体代码如下:

 Java代码 : 

 

/

package comyonyousudfile;

import javaioFileInputStream;

import javaioIOException;

import javautilHashMap;

/

 获取和判断文件头信息

 @author Sud

/

public class GetTypeByHead {

//缓存文件头信息-文件头信息

public static final HashMap<String, String> mFileTypes = new HashMap<String, String>();

static {

// images

mFileTypesput("FFD8FF", "jpg");

mFileTypesput("89504E47", "png");

mFileTypesput("47494638", "gif");

mFileTypesput("49492A00", "tif");

mFileTypesput("424D", "bmp");

//

mFileTypesput("41433130", "dwg"); // CAD

mFileTypesput("38425053", "psd");

mFileTypesput("7B5C727466", "rtf"); // 日记本

mFileTypesput("3C3F786D6C", "xml");

mFileTypesput("68746D6C3E", "html");

mFileTypesput("44656C69766572792D646174653A", "eml"); // 邮件

mFileTypesput("D0CF11E0", "doc");

mFileTypesput("5374616E64617264204A", "mdb");

mFileTypesput("252150532D41646F6265", "ps");

mFileTypesput("255044462D312E", "pdf");

mFileTypesput("504B0304", "docx");

mFileTypesput("52617221", "rar");

mFileTypesput("57415645", "wav");

mFileTypesput("41564920", "avi");

mFileTypesput("2E524D46", "rm");

mFileTypesput("000001BA", "mpg");

mFileTypesput("000001B3", "mpg");

mFileTypesput("6D6F6F76", "mov");

mFileTypesput("3026B2758E66CF11", "asf");

mFileTypesput("4D546864", "mid");

mFileTypesput("1F8B08", "gz");

}

/

 根据文件路径获取文件头信息

 @param filePath

 文件路径

 @return 文件头信息

/

public static String getFileType(String filePath){

Systemoutprintln(getFileHeader(filePath));

Systemoutprintln(mFileTypesget(getFileHeader(filePath)));

return mFileTypesget(getFileHeader(filePath));

}

/

 根据文件路径获取文件头信息

 @param filePath

 文件路径

 @return 文件头信息

/

public static String getFileHeader(String filePath){

FileInputStream is = null;

String value = null;

try {

is = new FileInputStream(filePath);

byte[] b = new byte[4];

/int read() 从此输入流中读取一个数据字节。 

int read(byte[] b) 从此输入流中将最多 blength 个字节的数据读入一个 byte 数组中。 

 int read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 

/

isread(b, 0, blength);

value = bytesToHexString(b);

} catch (Exception e){

} finally {

if (null != is){

try {

isclose();

} catch (IOException e){

}

}

}

return value;

}

/

 将要读取文件头信息的文件的byte数组转换成string类型表示

 @param src

 要读取文件头信息的文件的byte数组

 @return 文件头信息

/

private static String bytesToHexString(byte[] src){

StringBuilder builder = new StringBuilder();

if (src == null || srclength <= 0){

return null;

}

String hv;

for (int i = 0; i < srclength; i++){

// 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写

hv = IntegertoHexString(src[i] & 0xFF)toUpperCase();

if (hvlength() < 2){

builderappend(0);

}

builderappend(hv);

}

Systemoutprintln(buildertoString());

return buildertoString();

}

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

final String fileType = getFileType("E:/Java编程思想读书笔记docx");

Systemoutprintln(fileType);

}

}

楼主你好,首先你检测一下你的word是否正常,方法是:点开始,再点运行,输入winword /safe(注意,/前面有一个空格),看看是否能打开word,如果可以,那么word是正常的,没有问题。那么楼主打不开word可能是通用模板的问题了,通用模板的具体路径为:C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates,把这个文件夹下的内容全部彻底删除,然后再去打开word,它会自动生成一个默认的通用模板,问题应该就能解决了!

用jacob吧。。

/

@author eyuan

/

package pereyuanword2txtcore;

import comjacob;

import comjacobcom;

import comjacobactiveX;

import javaio;

import javautilScanner;

public class Core {

/

实现转换的函数

@param sourceFilesPath

@param destinationFilesPath

@param destinationFilesType

@return void

@see import comjacobactiveX;

/

public static void change(String sourceFilesPath,String destinationFilesPath,int destinationFilesType){

//使用word文件所在的目录(源路径)建立目录文件

File sourcePathFile=new File(sourceFilesPath);

//取得word文件(源文件列表)

File sourceFilesList[]=sourcePathFilelistFiles();

Systemoutprintln("共有"+sourceFilesListlength+"个文件(文件夹)");

//指定要转换的文件所在的目录下,如果有子目录,

//则进入子目录,继续查找word文档并将其转换,

//直到将指定目录下的所有word文档转换完。

//子目录名

String sourceChildPath=new String("");

//保持原来的层次关系,将子目录下的文件存放在新建的子目录中

String destiNationChildPath=new String("");

//检索文件,过滤掉非word文件,通过扩展名过滤

for(int i=0;i<sourceFilesListlength;i++){

//排除掉子文件夹

if(sourceFilesList[i]isFile()){

Systemoutprintln("第"+(i+1)+"个文件:");

//取得文件全名(包含扩展名)

String fileName=sourceFilesList[i]getName();

String fileType=new String("");

//取得文件扩展名

fileType=fileNamesubstring((fileNamelength()-4), fileNamelength());

//word2007-2010扩展名为docx

//判断是否为word2007-2010文档,及是否以docx为后缀名

if(fileTypeequals("docx")){

Systemoutprintln("正在转换。。。");

//输出word文档所在路劲

Systemoutprintln("目录:"+sourceFilesPath);

//输出word文档名

Systemoutprintln("文件名:"+fileName);

//Systemoutprintln(fileNamesubstring(0, (fileNamelength()-5)));

//核心函数

//启动word

ActiveXComponent app=new ActiveXComponent("WordApplication");

//要转换的文档的全路径(所在文件夹+文件全名)

String docPath=sourceFilesPath+"\\"+fileName;

//转换后的文档的全路径(所在文件夹+文件名)

String othersPath=destinationFilesPath+"\\"+fileNamesubstring(0,(fileNamelength()-5));

//

String inFile=docPath;

String outFile=othersPath;

//

boolean flag=false;

//核心代码

try{

//设置word可见性

appsetProperty("Visible", new Variant(false));

//

Dispatch docs=appgetProperty("Documents")toDispatch();

//打开word文档

Dispatch doc=Dispatchinvoke(docs, "Open", DispatchMethod, new Object[]{inFile,new Variant(false),new Variant(true)}, new int[1])toDispatch();

//0:Microsoft Word 97 - 2003 文档 (doc)

//1:Microsoft Word 97 - 2003 模板 (dot)

//2:文本文档 (txt)

//3:文本文档 (txt)

//4:文本文档 (txt)

//5:文本文档 (txt)

//6:RTF 格式 (rtf)

//7:文本文档 (txt)

//8:HTML 文档 (htm)(带文件夹)

//9:MHTML 文档 (mht)(单文件)

//10:MHTML 文档 (mht)(单文件)

//11:XML 文档 (xml)

//12:Microsoft Word 文档 (docx)

//13:Microsoft Word 启用宏的文档 (docm)

//14:Microsoft Word 模板 (dotx)

//15:Microsoft Word 启用宏的模板 (dotm)

//16:Microsoft Word 文档 (docx)

//17:PDF 文件 (pdf)

//18:XPS 文档 (xps)

//19:XML 文档 (xml)

//20:XML 文档 (xml)

//21:XML 文档 (xml)

//22:XML 文档 (xml)

//23:OpenDocument 文本 (odt)

//24:WTF 文件 (wtf)

//另存为指定格式的文档

Dispatchinvoke(doc, "SaveAs", DispatchMethod, new Object[]{outFile,new Variant(destinationFilesType)}, new int[1]);

//

Variant file=new Variant(false);

//关闭文档

Dispatchcall(doc, "Close",file);

//

flag=true;

}catch(Exception e){

eprintStackTrace();

Systemoutprintln("文档转换失败");

}finally{

appinvoke("Quit",new Variant[]{});

}

Systemoutprintln("转换完毕");

}

//word97-2003扩展名为doc

//判断是否为word2003-2007文档,及是否以doc为后缀名

else if(fileTypeequals("doc")){

Systemoutprintln("正在转换。。。");

//输出word文档所在路劲

Systemoutprintln("目录:"+sourceFilesPath);

//输出word文档名

Systemoutprintln("文件名:"+fileName);

//Systemoutprintln(fileNamesubstring(0, (fileNamelength()-4)));

//核心函数

//启动word

ActiveXComponent app=new ActiveXComponent("WordApplication");

//要转换的文档的全路径(所在文件夹+文件全名)

String docPath=sourceFilesPath+"\\"+fileName;

//转换后的文档的全路径(所在文件夹+文件名)

String othersPath=destinationFilesPath+"\\"+fileNamesubstring(0,(fileNamelength()-4));

//

String inFile=docPath;

String outFile=othersPath;

//

boolean flag=false;

//核心代码

try{

//设置word可见性

appsetProperty("Visible", new Variant(false));

//

Dispatch docs=appgetProperty("Documents")toDispatch();

//打开word文档

Dispatch doc=Dispatchinvoke(docs, "Open", DispatchMethod, new Object[]{inFile,new Variant(false),new Variant(true)}, new int[1])toDispatch();

//另存为指定格式的文档

Dispatchinvoke(doc, "SaveAs", DispatchMethod, new Object[]{outFile,new Variant(destinationFilesType)}, new int[1]);

//

Variant file=new Variant(false);

//关闭文档

Dispatchcall(doc, "Close",file);

//

flag=true;

}catch(Exception e){

eprintStackTrace();

Systemoutprintln("文档转换失败");

}finally{

appinvoke("Quit",new Variant[]{});

}

Systemoutprintln("转换完毕");

}

//文档的扩展名不是doc或docx

else{

Systemoutprintln("非word文档");

}

}

//如果是子文件夹,则递归遍历,将所有的word文档转换

else{

//

sourceChildPath=sourceFilesPath;

//该文件是目录

sourceChildPath=sourceChildPath+"\\"+sourceFilesList[i]getName()+"\\";

Systemoutprintln("源文件所在路径:"+sourceChildPath);

//修改目标文件夹,保持原来的层级关系

destiNationChildPath=destinationFilesPath;

destiNationChildPath=destinationFilesPath+"\\"+sourceFilesList[i]getName()+"\\";

Systemoutprintln("转换后文件所在路径"+destiNationChildPath);

//

mkdir(destiNationChildPath);

//递归遍历所有目录,查找word文档,并将其转换

change(sourceChildPath, destiNationChildPath,destinationFilesType);

}

}

Systemoutprintln("所有文档转换完毕");

}

/

  用于创建文件夹的方法

  @param mkdirName

 /

public static void mkdir(String mkdirName){

try{

//使用指定的路径创建文件对象

File dirFile = new File(mkdirName);

//

boolean bFile = dirFileexists();

//已经存在文件夹, *** 作???提醒是否要替换

if( bFile == true ) {

Systemoutprintln("已经存在文件夹"+mkdirName);

}

//不存在该文件夹,则新建该目录

else{

Systemoutprintln("新建文件夹"+mkdirName);

bFile = dirFilemkdir();

if( bFile == true ){

Systemoutprintln("文件夹创建成功");

}else{

Systemoutprintln(" 文件夹创建失败,清确认磁盘没有写保护并且空件足够");

Systemexit(1);

}

}

}catch(Exception err){

Systemerrprintln("ELS - Chart : 文件夹创建发生异常");

errprintStackTrace();

}finally{

}

}

/

判断某个文件夹是否存在

@param path

/

public static boolean isPathExist(String path){

boolean isPathExist=false;

try{

File pathFile = new File(path);

if(pathFileexists())

isPathExist= true;

else

isPathExist= false;

}catch(Exception err){

errprintStackTrace();

}

return isPathExist;

}

/

主函数

/

public static void main(String[] args){

Scanner sc=new Scanner(Systemin);

//源文档所在路径

String sourceFilesPath="";

// String inputSourcePath="";

// boolean sourcePathFlag=true;

// Systemoutprintln("请输入要转换文档所在的文件夹");

// while(sourcePathFlag){

// inputSourcePath=scnext();

// if(!isPathExist(inputSourcePath))

// Systemoutprintln("源路径不存在,请输入正确的路径");

// else

// sourcePathFlag=false;

// }

// sourceFilesPath=inputSourcePath;

sourceFilesPath="D:\\word";

//目标文档要存放的目录

String destinationFilesPath="";

// String inputdestinationPath="";

// boolean destinationPathFlag=true;

// Systemoutprintln("请输入转换后文档要存放的文件夹");

// while(destinationPathFlag){

// inputdestinationPath=scnext();

// //目标文件不存在时,是否要提示用户创建文件

// if(!isPathExist(inputdestinationPath))

// Systemoutprintln("目标路径不存在,请输入正确的路径");

// else

// destinationPathFlag=false;

// }

// destinationFilesPath=inputdestinationPath;

destinationFilesPath="D:\\txt";

//选择要转换的类型

int destinationFilesType=0;

int inputNumber=0;

boolean numFlag=true;

Systemoutprintln("您要将word文档转换为哪种文档格式?");

Systemoutprintln("0:doc \t 2:txt \t 8:html \t 9:htm \t 11:xml \t 12:docx \t 17:pdf \t 18:xps");

while(numFlag){

inputNumber=scnextInt();

if(inputNumber!=2&&inputNumber!=8&&inputNumber!=9&&inputNumber!=11&&inputNumber!=12&&inputNumber!=17){

Systemoutprintln("您的输入有误,请输入要转换的文档类型前的数字");

}else

numFlag=false;

}

destinationFilesType=inputNumber;

//实行转换

change(sourceFilesPath, destinationFilesPath,destinationFilesType);

//测试各种类型转换

// for(int i=0;i<25;i++){

// destinationFilesType=i;

// Systemoutprintln("文件类型"+destinationFilesType);

// Systemoutprintln("存放目录:"+destinationFilesPath+"\\"+i);

// mkdir(destinationFilesPath+"\\"+i);

// change(sourceFilesPath, destinationFilesPath+"\\"+i,destinationFilesType);

// }

}

}

这个我刚用的。。格式都能带过来的。 你自己再下载个 jacob的包和dll文件

public static void list(File path, String[] extArr,HashMap hm) {

if (!pathexists()) {

Systemoutprintln("文件名称不存在!");

} else {

if (pathisFile()) {

for (int i = 0; i < extArrlength; i++) {

if (pathgetName()toLowerCase()endsWith(extArr[i])) {// 文件格式

hmput(pathgetName(), path);

}

}

} else {

File[] files = pathlistFiles();

for (int i = 0; i < fileslength; i++) {

list(files[i], extArr,hm);

}

}

}

}

以上就是关于java实现模板全部的内容,包括:java实现模板、java解析word文档有哪些方法、java如何将数据导入Excel模板等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9626159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存