通过文件路径获取文件(pdf/doc/docx/xls/xlsx)并输出文件内容
程序员文章站
2022-03-10 20:37:02
最近在开发过程中,遇到了需要将附件中的文本读出存储到数据库中的问题,下面就记录一下各个格式文本的读取方式,大家按需索取,如有不明白的地方,欢迎留言讨论。String filePath = “你的文件路径";注意,要精准到文件的后缀名,比如D:/demo.doc;File file = new File(filePath);当文件后缀为doc时: if(file.isFile() && file.exists()) { if (fi...
最近在开发过程中,遇到了需要将附件中的文本读出存储到数据库中的问题,下面就记录一下各个格式文本的读取方式,大家按需索取,如有不明白的地方,欢迎留言讨论。
String filePath = “你的文件路径";
注意,要精准到文件的后缀名,比如D:/demo.doc;
File file = new File(filePath);
当文件后缀为doc时:
if(file.isFile() && file.exists()) {
if (filePath.endsWith(".doc")) {
InputStream is = null;
WordExtractor re = null;
try {
is = new FileInputStream(new File(filePath));
re = new WordExtractor(is);
fileContent = re.getText();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(re != null){
re.close();
}
if(is != null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
当文件后缀为docx时:
if (filePath.endsWith(".docx")) {
OPCPackage opcPackage = null;
POIXMLTextExtractor extractor = null;
try {
opcPackage = POIXMLDocument.openPackage(filePath);
extractor = new XWPFWordExtractor(opcPackage);
fileContent = extractor.getText();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(extractor != null){
extractor.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
当文件后缀为pdf时:
if(filePath.endsWith(".pdf")){
FileInputStream in = null;
RandomAccessRead randomAccessRead = null;
try {
in = new FileInputStream(new File(filePath));
randomAccessRead = new RandomAccessBufferedFileInputStream(in);
PDFParser parser = new PDFParser(randomAccessRead);
parser.parse();
PDDocument pdDocument = parser.getPDDocument();
PDFTextStripper stripper = new PDFTextStripper();
fileContent = stripper.getText(pdDocument);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(randomAccessRead != null){
randomAccessRead.close();
}
if(in != null){
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
当文件后缀为xls时:
if (filePath.endsWith(".xls")) {
List<String> listXLS = new ArrayList<>();
// 解析excel
POIFSFileSystem fs = null;
// 获取整个excel
HSSFWorkbook hb = null;
try {
fs = new POIFSFileSystem(new FileInputStream(filePath));
hb = new HSSFWorkbook(fs);
// 遍历多个sheet页
for(int sheetIndex=0;sheetIndex<hb.getNumberOfSheets();sheetIndex++) {
HSSFSheet sheet = hb.getSheetAt(sheetIndex);
//HSSFSheet sheet = hb.getSheetAt(0);
// 获取第一行
int firstrow = sheet.getFirstRowNum();
// 获取最后一行
int lastrow = sheet.getLastRowNum();
// 循环行数依次获取列数
for (int i = firstrow; i < lastrow + 1; i++) {
// 获取哪一行i
HSSFRow row = sheet.getRow(i);
if (row != null) {
// 获取这一行的第一列
int firstcell = row.getFirstCellNum();
// 获取这一行的最后一列
int lastcell = row.getLastCellNum();
//将每一行的每一列数据都存入集合中
for (int j = firstcell; j < lastcell; j++) {
// 获取第j列
HSSFCell cell = row.getCell(j);
if (cell != null) {
String cellStr = cell.toString();
if(CommonUtils.isNotEmpty(cellStr)){
listXLS.add(cell.toString());
}
}
}
}
}
fileContent= String.valueOf(listXLS);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(hb != null){
hb.close();
}
if(fs != null){
fs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
当文件后缀为xlsx时:
if (filePath.endsWith(".xlsx")) {
List<String> listXLSX = new ArrayList<>();
// 用流的方式先读取到你想要的excel的文件
FileInputStream fis = null;
// 获取整个excel
XSSFWorkbook hb = null;
try {
fis = new FileInputStream(new File(filePath));
hb = new XSSFWorkbook(fis);
// 遍历表单sheet
for(int sheetIndex=0;sheetIndex<hb.getNumberOfSheets();sheetIndex++) {
Sheet sheet = hb.getSheetAt(sheetIndex);
//Sheet sheet = hb.getSheetAt(0);
// 获取第一行
int firstrow = sheet.getFirstRowNum();
// 获取最后一行
int lastrow = sheet.getLastRowNum();
// 循环行数依次获取列数
for (int i = firstrow; i < lastrow + 1; i++) {
// 获取哪一行i
Row row = sheet.getRow(i);
if (row != null) {
// 获取这一行的第一列
int firstcell = row.getFirstCellNum();
// 获取这一行的最后一列
int lastcell = row.getLastCellNum();
// 创建一个集合,用处将每一行的每一列数据都存入集合中
for (int j = firstcell; j < lastcell; j++) {
// 获取第j列
Cell cell = row.getCell(j);
if (cell != null) {
String cellStr = cell.toString();
if(CommonUtils.isNotEmpty(cellStr)){
listXLSX.add(cell.toString());
}
}
}
}
}
fileContent = String.valueOf(listXLSX);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(hb != null){
hb.close();
}
if(fis != null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
大家有更好的方法欢迎留言讨论。
本文地址:https://blog.csdn.net/qq_38531678/article/details/112008570
上一篇: Go之集合slice的实现