java对一些文件格式的操作(读写)
正文:
文件格式一般可分为:①文档格式、②图片格式、③视频格式、④声音格式、⑤系统格式。
具体如下:
一、文档格式有:TXT、DOC、DOCX、XLS、PPT、XLSX、PPTX 等。
二、图片格式有:JPG、PNG、PDF、TIFF、SWF等。
三、视频格式有:FLV、RMVB、MP4、MVB等。
四、声音格式有:WMA、MP3等。
五、系统格式有:RAR、EXE等。
这里只讨论前2种。
(1).操作TXT
package com.chunbaosheng.demo;import java.io.*;public class TestOne {
//使用FileInputStream实现读取txt文件内容:
//使用FileOutputStream实现写入txt文件内容:/**传入txt路径读取txt文件* @param txtPath* @return 返回读取到的内容*/public static String readTxt(String txtPath) {File file = new File(txtPath);if (file.isFile() && file.exists()) {try {FileInputStream fileInputStream = new FileInputStream(file);InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);StringBuffer sb = new StringBuffer();String text = null;while ((text = bufferedReader.readLine()) != null) {sb.append(text);}return sb.toString();} catch (Exception e) {e.printStackTrace();}}return null;}/**使用FileOutputStream来写入txt文件* @param txtPath txt文件路径* @param content 需要写入的文本*/public static void writeTxt(String txtPath,String content){FileOutputStream fileOutputStream = null;File file = new File(txtPath);try {if(file.exists()){//判断文件是否存在,如果不存在就新建一个txtfile.createNewFile();}fileOutputStream = new FileOutputStream(file);fileOutputStream.write(content.getBytes());fileOutputStream.flush();fileOutputStream.close();} catch (Exception e) {e.printStackTrace();}}//验证方法:先写入文件后读取打印如下:public static void main(String[] args) {writeTxt("C:\\Users\\Administrator\\Desktop\\1\\result1.txt", "测试写入txt文件内容");String str = readTxt("C:\\Users\\Administrator\\Desktop\\1\\result1.txt");System.out.println(str);}}
(2).操作Doc/Docx 文档
<!-- apache poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.14</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.14</version></dependency>
读:
package com.chunbaosheng.demo;import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;public class TestTwo {/*** @Description: POI 读取 word* @update logs* @throws Exception*/public static List<String> readWord(String filePath) throws Exception{List<String> linList = new ArrayList<String>();String buffer = "";try {if (filePath.endsWith(".doc")) {InputStream is = new FileInputStream(new File(filePath));WordExtractor ex = new WordExtractor(is);buffer = ex.getText();is.close();if(buffer.length() > 0){//使用回车换行符分割字符串String [] arry = buffer.split("\\r\\n");for (String string : arry) {linList.add(string.trim());}}} else if (filePath.endsWith(".docx")) {System.out.println("读取docx");OPCPackage opcPackage = POIXMLDocument.openPackage(filePath);POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);buffer = extractor.getText();extractor.close();if(buffer.length() > 0){//使用换行符分割字符串String [] arry = buffer.split("\\n");for (String string : arry) {System.out.println(string);linList.add(string.trim());}}} else {return null;}return linList;} catch (Exception e) {System.out.print("error---->"+filePath);e.printStackTrace();return null;}}public static void main(String[] args)throws Exception {System.out.println(readWord("C:\\Users\\Administrator\\Desktop\\1\\Java面试宝典.docx"));}}
写:
package com.chunbaosheng.demo;import org.apache.poi.hwpf.HWPFDocument;
import java.io.*;public class WriteDoc {public static void testWrite() throws Exception {String templatePath = "C:\\Users\\Administrator\\Desktop\\1\\template.doc";InputStream is = new FileInputStream(templatePath);OutputStream os = null;HWPFDocument doc = new HWPFDocument(is);os = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\1\\template1.doc"));//把doc输出到输出流中doc.write(os);os.close();// is.close();}public static void main(String[] args) throws Exception{testWrite();}}
操作:XLS,XLSX
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.3</version>
</dependency>
写:
// 根据user模板构建数据
private List<User> getUserData() {List<User> users = new ArrayList<>();for (int i = 1; i <= 10; i++) {User user = User.builder().userId(i).userName("admin" + i).gender(i % 2 == 0 ? "男" : "女").salary(i * 1000.00).hireDate(new Date()).build();users.add(user);}return users;
}@Test
public void testWriteExcel() {String filename = "D:\\study\\excel\\user1.xlsx";// 向Excel中写入数据 也可以通过 head(Class<?>) 指定数据模板EasyExcel.write(filename, User.class).sheet("用户信息").doWrite(getUserData());
}
读:
@Test
public void testReadExcel() {// 读取的excel文件路径String filename = "D:\\study\\excel\\read.xlsx";// 读取excelEasyExcel.read(filename, DemoData.class, new AnalysisEventListener<DemoData>() {// 每解析一行数据,该方法会被调用一次@Overridepublic void invoke(DemoData demoData, AnalysisContext analysisContext) {System.out.println("解析数据为:" + demoData.toString());}// 全部解析完成被调用@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("解析完成...");// 可以将解析的数据保存到数据库}}).sheet().doRead();
}//读excel的方式二代码@Test
public void testReadExcel2() {// 读取的excel文件路径String filename = "D:\\study\\excel\\read.xlsx";// 创建一个数据格式来装读取到的数据Class<DemoData> head = DemoData.class;// 创建ExcelReader对象ExcelReader excelReader = EasyExcel.read(filename, head, new AnalysisEventListener<DemoData>() {// 每解析一行数据,该方法会被调用一次@Overridepublic void invoke(DemoData demoData, AnalysisContext analysisContext) {System.out.println("解析数据为:" + demoData.toString());}// 全部解析完成被调用@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("解析完成...");// 可以将解析的数据保存到数据库}}).build();// 创建sheet对象,并读取Excel的第一个sheet(下标从0开始), 也可以根据sheet名称获取ReadSheet sheet = EasyExcel.readSheet(0).build();// 读取sheet表格数据, 参数是可变参数,可以读取多个sheetexcelReader.read(sheet);// 需要自己关闭流操作,在读取文件时会创建临时文件,如果不关闭,会损耗磁盘,严重的磁盘爆掉excelReader.finish();
}
操作 PPT、PPTX
写
//Java基于POI对PPT的基本操作
// 在Java中对PPT文件进行操作的话,我使用的是Apache的开源项目POI。该项目的功能主要是使用
//Java开发或生成微软办公文件,比如:Word、Excel、PPT、Visio等。其中实现对PPT文件进行操作的类包
//主要是HSLF(.ppt)和XSLF(.pptx),在本文中,会以XSLF为主。
//创建PPT文件,并生成空白幻灯片
package com.jointstarc.test;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.xslf.usermodel.XMLSlideShow;import org.apache.poi.xslf.usermodel.XSLFSlide;public class Demo1 {public static void main(String[] args) {// 创建一个空白PPTXMLSlideShow ppt = new XMLSlideShow();// 在空白的PPT中创建一个空白的幻灯片XSLFSlide slide = ppt.createSlide();try {// 对新建的PPT保存到硬盘里ppt.write(new FileOutputStream("D://test3.pptx"));} catch (Exception e) {e.printStackTrace();} finally {if (ppt != null) {try {// 保存完之后要对PPT进行关闭操作ppt.close();} catch (IOException e) {e.printStackTrace();}}}}}
//添加文本框和超链接
/** 在空幻灯片中插入一个文本框,然后在文本框中写入文字,* 并给文字添加一个超链接*/// 在幻灯片中插入一个文本框XSLFTextShape ts = slide.createTextBox();// 设置文本框的位置和文本框大小ts.setAnchor(new Rectangle(150, 150, 200, 50));// 设置文本框里面的文字XSLFTextRun tr = ts.addNewTextParagraph().addNewTextRun();tr.setText("测试一下");// 给文本添加颜色tr.setFontColor(Color.RED);// 给文本添加超链接XSLFHyperlink link = tr.createHyperlink();link.setAddress("http://www.baidu.com");
添加表格
/** 在幻灯片中添加表格*/// 在幻灯片中插入一个表格XSLFTable table = slide1.createTable();// 设置表格的位置和表格大小table.setAnchor(new Rectangle(50, 100, 100, 100));for (int i = 0; i < 5; i++) {// 在表格中添加一行XSLFTableRow row = table.addRow();for (int j = 0; j < 5; j++) {// 在行中添加一个单元格XSLFTableCell cell = row.addCell();// 设置单元格中的内容和样式XSLFTextParagraph p = cell.addNewTextParagraph();p.setTextAlign(TextAlign.CENTER);XSLFTextRun tr1 = p.addNewTextRun();tr1.setFontColor(Color.RED);tr1.setText("测试" + i + j);// 设置单元格边框的粗细cell.setBorderWidth(BorderEdge.bottom, 2.0);cell.setBorderWidth(BorderEdge.left, 2.0);cell.setBorderWidth(BorderEdge.right, 2.0);cell.setBorderWidth(BorderEdge.top, 2.0);// 设置单元格边框的颜色cell.setBorderColor(BorderEdge.bottom, Color.black);cell.setBorderColor(BorderEdge.left, Color.black);cell.setBorderColor(BorderEdge.right, Color.black);cell.setBorderColor(BorderEdge.top, Color.black);}}
添加图片
/** 在幻灯片中插入一张图片*/// 图片文件File image = new File("D://111.jpg");// 图片文件输入流FileInputStream imageFis = new FileInputStream(image);// 获取图片大小int len = (int) image.length();// 创建一个字节数组,数组大小与图片文件大小一致byte[] imageData = new byte[len];// 将图片数据读进字节数组中imageFis.read(imageData);// 将图片添加到PPT中XSLFPictureData pd = ppt.addPicture(imageData, PictureData.PictureType.JPEG);// 将图片放到指定的幻灯片中XSLFPictureShape pic = slide2.createPicture(pd);// 设置图片框的放置的位置和大小pic.setAnchor(new Rectangle(50, 100, 200, 200));
读取现有的PPT文件,并在已有的幻灯片后添加幻灯片
package com.jointstarc.test;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.xslf.usermodel.XMLSlideShow;import org.apache.poi.xslf.usermodel.XSLFSlide;public class Demo2 {public static void main(String[] args) {XMLSlideShow ppt = null;try {// 通过输入流读取一个现有的PPT文件,生成PPT类ppt = new XMLSlideShow(new FileInputStream("D://test.pptx"));// 在现有的PPT文件后面新建一个空白幻灯片XSLFSlide slide = ppt.createSlide();// 将修改后的PPT文件回写到硬盘ppt.write(new FileOutputStream("D://test3.pptx"));} catch (Exception e) {e.printStackTrace();} finally {if (ppt != null) {try {// 保存完之后要对PPT进行关闭操作ppt.close();} catch (IOException e) {e.printStackTrace();}}}}}
读取现有的PPT内容,并进行修改
获取PPT的所有文本框里的文字,并进行更改
/** 获取PPT的所有文本框里的文字,并进行更改*/// 获取PPT中的所有幻灯片List<XSLFSlide> slides = ppt.getSlides();// 遍历幻灯片for (XSLFSlide slide : slides) {// 获取幻灯片中的所有图形(文本框、表格、图形...)List<XSLFShape> shapes = slide.getShapes();// 遍历图形for (XSLFShape shape : shapes) {// 判断该图形类是否是文本框类if (shape instanceof XSLFTextShape) {// 将图像类强制装换成文本框类XSLFTextShape ts = (XSLFTextShape) shape;// 获取文本框内的文字String str = ts.getText();System.out.println(str);// 若想对文本框内的文字进行更改,还需要进行如下步骤List<XSLFTextParagraph> textParagraphs = ts.getTextParagraphs();for (XSLFTextParagraph tp : textParagraphs) {List<XSLFTextRun> textRuns = tp.getTextRuns();for (XSLFTextRun r : textRuns) {if ("201809".equals(r.getRawText())) {// 对匹配到的字符串进行更改r.setText("2018-09");// 设置字体颜色r.setFontColor(Color.RED);}}}}}}
获取PPT的所有表格里的文字,并进行更改
/** 获取PPT的所有表格里的文字,并进行更改*/// 获取PPT中的所有幻灯片List<XSLFSlide> slides = ppt.getSlides();for (XSLFSlide slide : slides) {// 获取幻灯片中的所有图形(文本框、表格、图形...)List<XSLFShape> shapes = slide.getShapes();for (XSLFShape shape : shapes) {// 判断该图形类是否是表格类if (shape instanceof XSLFTable) {// 将图像类强制装换成表格类XSLFTable table = (XSLFTable) shape;// 获取表格中的所有行List<XSLFTableRow> rows = table.getRows();for (XSLFTableRow tr : rows) {// 获取行中的所有单元格List<XSLFTableCell> cells = tr.getCells();for (XSLFTableCell tc : cells) {// 获取单元格内的文字String str = tc.getText();// 若想对表格内的文字进行更改,还需要进行如下步骤List<XSLFTextParagraph> textParagraphs = tc.getTextParagraphs();for (XSLFTextParagraph tp : textParagraphs) {List<XSLFTextRun> textRuns = tp.getTextRuns();for (XSLFTextRun r : textRuns) {if ("风险指标".equals(r.getRawText())) {// 对匹配到的字符串进行更改r.setText("测试修改文字");// 设置字体颜色r.setFontColor(Color.RED);}}}}}}}}
获取PPT的所有图片,并进行更改
/** 获取PPT的所有图片,并进行更改*/// 获取PPT中的所有幻灯片List<XSLFSlide> slides = ppt.getSlides();for (XSLFSlide slide : slides) {// 获取幻灯片中的所有图形(文本框、表格、图形...)List<XSLFShape> shapes = slide.getShapes();for (XSLFShape shape : shapes) {// 判断该图形类是否是图片框类if (shape instanceof XSLFPictureShape) {/** 获取图片数据*/// 将图像类强制装换成图片框类XSLFPictureShape ps = (XSLFPictureShape) shape;// 获取图片的字节码数据(可以利用输出流将该图片保存到硬盘里)byte [] pictureData = ps.getPictureData().getData();/** 更改图片*/// 图片文件File image = new File("D://222.jpg");// 图片文件输入流FileInputStream imageFis = new FileInputStream(image);// 获取图片大小int len = (int) image.length();// 创建一个字节数组,数组大小与图片文件大小一致byte[] imageData = new byte[len];if (imageFis.read(imageData) != -1) {// 更换图片必须图片设置索引,要不不生效ps.getPictureData().setIndex(1);ps.getPictureData().setData(imageData);}// 关闭输入流imageFis.close();}}}
操作图片格式有:JPG、PNG、PDF、TIFF、SWF等。
<!-- Pdf文件转图片方式2所需maven依赖包:start--><dependency><groupId>org.icepdf.os</groupId><artifactId>icepdf-core</artifactId><version>6.1.2</version><exclusions><exclusion><groupId>javax.media</groupId><artifactId>jai-core</artifactId></exclusion></exclusions></dependency><!-- Pdf文件转图片方式2所需maven依赖包:end-->
Pdf文件转图片方法
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.rendering.PDFRenderer;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;public class PdfToImgOne {/*** pdfToImageFile("E:\\pdf\\1.pdf", "E:\\pdf\\img\\");* @param inputFilePath :Pdf地址:"E:\\pdf\\1.pdf"* @param outputFilePath :转图片后图片保存地址:"E:\\pdf\\img\\"* @throws Exception*/static void pdfToImageFile(String inputFilePath, String outputFilePath) throws Exception {long currentTimeMillisStart = System.currentTimeMillis();PDDocument doc = null;ByteArrayOutputStream os = null;InputStream stream = null;OutputStream out = null;try {// pdf路径stream = new FileInputStream(inputFilePath);// 加载解析PDF文件doc = PDDocument.load(stream);PDFRenderer pdfRenderer = new PDFRenderer(doc);PDPageTree pages = doc.getPages();int pageCount = pages.getCount();for (int i = 0; i < pageCount; i++) {BufferedImage bim = pdfRenderer.renderImageWithDPI(i, 200);os = new ByteArrayOutputStream();ImageIO.write(bim, "jpg", os);byte[] dataList = os.toByteArray();// jpg文件转出路径File file = new File(outputFilePath + Integer.valueOf(i + 1) + ".jpg");if (!file.getParentFile().exists()) {// 不存在则创建父目录及子文件file.getParentFile().mkdirs();file.createNewFile();}out = new FileOutputStream(file);out.write(dataList);}} catch (Exception e) {e.printStackTrace();throw e;} finally {if (doc != null) doc.close();if (os != null) os.close();if (stream != null) stream.close();if (out != null) out.close();}long currentTimeMillisEnd = System.currentTimeMillis();System.out.println("18页的Pdf转换完成耗时:"+(currentTimeMillisEnd - currentTimeMillisStart)/1000);//18页的Pdf转换完成耗时:6}
}
java对一些文件格式的操作(读写)相关推荐
- 利用java poi对excel表的读写操作
2019独角兽企业重金招聘Python工程师标准>>> 利用java poi对excel表的读写操作 POI简介: Apache POI是一种流行的API,它允许程序员使用Java程 ...
- java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接
java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接 0x0 阅读本文章你能会使用java与西门子plc 进行通信 所有环境都为仿真模拟环境, 本测试使用的是西门子plc(s ...
- Java编程那些事儿——文件操作之写文件
Java编程那些事儿--文件操作之写文件 Java, Java培训, Java基础, Java学习, Java教程 11.3.1.4 写文件 如前所述,将程序内部的数据输出到程序外部的数据源,应该使用 ...
- 二, 大数据基础架构Hadoop-HDFS入门和基本操作(基本组成, Shell操作, API操作, 读写流程) hf
一, HDFS概述 1.1 HDFS的产生背景和定义 随着数据量越来越大,我们需要把文件分布存储到多台计算机上,分布式文件管理系统作为一种管理多台机器上文件的系统应运而生, HDFS是其中的一种. H ...
- Java对Excel表格的操作
Java对Excel表格的操作 目前软件开发多采用B/S架构.正B/S架构可以给软件的开发部署带来很大的便利,但是与此同时这种架构也带来了一些问题,例如Web报表的处理等,在B/S架构下,客户端的开发 ...
- Java之输入输出流(文件的读写)
Java之输入输出流(文件的读写) 首先,在编程的世界,流明显显得很重要.C++的输入输出流,Java的输入输出流等等. 首先我们得学会如何使用Java的输入输出流.首先,它们被封装在Java的一个叫 ...
- Java中的图像锐化操作
** Java中的图像锐化操作 ** 一.该图像锐化的思想: 本文的图像锐化是将图像中的R,G,B的值分别从原图像中提出,然后将分别将这三个R,G,B的值分别与卷积核进行卷积,最终再将最后的三个卷积的 ...
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
- JAVA通过JDBC连接并操作MySQL数据库
JAVA通过JDBC连接并操作MySQL数据库 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提 ...
最新文章
- Python再夺冠,上古语言COBOL大流行,IEEE Spectrum 2020年度编程语言排行榜出炉!...
- 使用 jetty-maven-plugin发布maven项目
- scope python_Python标准库Scope
- 启动瑞星杀毒时提示"应用程序正常初始化(0xc00000ba)失败
- 语音的基本概念--译自CMU sphinx
- 20120918-LIST类定义《数据结构与算法分析》
- HDU 5933 2016CCPC杭州 A: ArcSoft's Office Rearrangement
- Alfresco 4 项目介绍
- PHP URL参数获取方式的四种例子
- 【ArcGIS】安装ArcGISDesktop10.6报错A service pack is required on this oprating system.
- 511遇见易语言逍遥模拟器模块封装调用示范
- 百度分享支持https
- Oracle 11gR2 dataguard搭建说明 --- duplicate方式
- 给你一部电梯,如何对其进行测试?
- pip installl lap安装失败 error: Microsoft Visual C++ 14.0 or greater is required.
- panda提取时间戳中的日期_《我在时间尽头等你》中的文案,总有一个戳中你的泪点...
- Java计算机毕业设计四六级在线考试系统源码+系统+数据库+lw文档
- 初步了解Panda3D场景管理
- 俞敏洪励志演讲稿【一】
- Mysql 时区修改问题(冬令时夏令时)