字节流生成word文档
将字节流直接写入word
除了txt这种简单的文件(即可用字节流,也可用字符流--不需要专门的这种文件的java类),其他类型的文件word,execl,zip等都可以直接写入字节流(写入空的类型文件中,先要建立一个这样的空类型文件),拿出字节流来(用这种结构的
这种文件java类去获取内部流),由于处txt这种类型的文件外,其他复杂类型的文件都有内部结构描述,不可用字符流,只能用字节流一次性写入
new file 只能new出文件夹,要形成特殊类型的文件 还需要将此文件夹转成流,最后用对应文件类型的java工具类转化成这种类型的文件
XWPFDocument document = new XWPFDocument();
// Write the Document in file system
FileOutputStream out1 = new FileOutputStream(new File("C:\\Users\\yy\\hb1009\\simple1.doc"));
document.write(out1);
out1.close();
System.out.println("createdocument.docx written successully");
当然在java中通过对应工具类直接遍历操作文件对象此种类型的文件
1,字符串可以转化成流,文件也可转化成流
2,对于流无论read,write操作的对象都是左边的对象
3,对应文件类型的java工具类转化成这种类型的文件
4,一般的流 output是最终拼接,用来循环的btye[] 是缓存载体,socket这种有业务特性的--- 缓冲区就是起到临时存储拼接的作用 io包=包头(包的长度)+包体 ,先读取包头,然后在缓存区拼接相应长度的内容,之后读出---处理粘包
5,字节和输入/出流的关系是可以取出,写入文件和输入/出流的关系是文件进入输入/出就变成了字节,从流中可以取出
6,普通的对象通过相应的步骤可以一步一步转化成字符流,字节流
out 时流的最终写入点,input时流的来源
相应结构的reader(扫描器)从input(需要被复印的原件)中读,相应的writer(打印机)写入out(放好的白纸)最终需要关闭扫描器,打印机
7,wr.flush();一般打印机会在关闭之前flush,就是马上提交打印内容,否则容易出现打印完成,没有东西出来
8,不同类型的文件需要用相应类型的打印机(写类),传输的时候只要传入出来的纸(out),out经过相应类型的打印机自然有对应类型的结构
/**
* 助贷放款或结清证明生成
* @param request
* @param errors
* @return
* @throws Exception
*/
@RequestMapping("tYZDLnOrClrCtfyGen")
public JSONObject TYZDLnOrClrCtfyGen(@Valid @RequestBody ApiRequest request,Errors errors) throws Exception {
LOGGER.info("助贷放款或结清证明生成,参数:[{}]",JSONObject.toJSONString(request));
JSONObject jsonObject=new JSONObject();
String dataStr = String.valueOf(request.getData());
JSONObject dataObject = JSONObject.parseObject(dataStr);
request.setData(dataObject);
JSONObject jsonObjRes= facadeSend(request,errors,TradeEnum.S0025.getTcode());
SftpUtils sftp = null;
try {
String jsonObjResData= jsonObjRes.getString("data");
//String jsonObjResData= jsonObjRes.getString("rspData");
JSONObject jsonRes=null;
String pathImg="";
String msg="";
if(jsonObjResData!=null ){
jsonRes =(JSONObject)JSONObject.parse(jsonObjResData) ;
JSONObject jsonResFile =(JSONObject)JSONObject.parse(jsonRes.getString("rspData"));
if(CodeEnum.CODE_000000.getCode().equals(jsonRes.getString("returnCode"))){
pathImg =jsonResFile.get("FILE_PATH")+"";
pathImg =pathImg+"/"+jsonResFile.get("FILE_NAME")+"";
}
msg=jsonRes.getString("returnMsg");
}
pathImg="/file/1005/004_20181105163758_EDHT20180815003420002.doc";
if(!"".equals(pathImg)){
sftp =new SftpUtils(jqulr, jqport, jquserName, jqpassWord);
String imgData="";
//=sftp.readFileNotmove(pathImg);
byte[] byteArray = sftp.getFileToByte(pathImg);
imgData = new String(byteArray, "UTF-8");
jsonObject.put("code", CodeEnum.CODE_0000.getCode());
jsonObject.put("msg", CodeEnum.CODE_0000.getMsg());
jsonObject.put("data",byteArray);-----------------------------------------------直接返回字节
}else{
jsonObject.put("code", CodeEnum.CODE_999999.getCode());
jsonObject.put("msg", msg);
}
} catch (Exception e) {
jsonObject.put("code", CodeEnum.CODE_999999.getCode());
jsonObject.put("msg", CodeEnum.CODE_999999.getMsg());
e.printStackTrace();
}
return jsonObject;
}
@Test
public void zipTest1 () throws IOException {
File file = new File("C:\\Users\\yy\\tst\\20271019.zip");
Map<String, Object> reqMap = new HashMap<String, Object>();
reqMap.put("chnCode", "HOUBANK");
reqMap.put("bankCode", "SANXIANG");
reqMap.put("data", null);
String s1 = HttpClientUtil.httpJsonPost("http://localhost:9999/HOUBANKAPI/tYZDLnOrClrCtfyGen", JSON.toJSONString(reqMap));
BASE64Decoder decoder = new BASE64Decoder();
JSONObject jsonObject = JSON.parseObject(s1);
byte[] myJson= new String(decoder.decodeBuffer(jsonObject.get("data").toString()), "UTF-8").getBytes();
byte2file("",myJson);
}
public void byte2file(String path,byte[] data) {
try {
XWPFDocument document = new XWPFDocument();
// Write the Document in file system
FileOutputStream out1 = new FileOutputStream(new File("C:\\Users\\yy\\hb1009\\simple1.doc"));
document.write(out1);
out1.close();
System.out.println("createdocument.docx written successully");
File tempDoc = new File("C:\\Users\\yy\\hb1009", "simple1.doc");
BufferedOutputStream out = null;
XWPFDocument temp = null;
temp = new XWPFDocument(new BufferedInputStream(new FileInputStream(tempDoc)));
out = new BufferedOutputStream(new FileOutputStream(tempDoc));
out.write(data);
} catch (Exception e) {
e.printStackTrace();
}
}
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>