java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流
更新時間:2021年10月19日 09:15:16 作者:指尖擋不住流年
這篇文章主要介紹了java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
java 遠(yuǎn)程文件url 轉(zhuǎn)為輸入流
URL url = new URL(fileUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//設(shè)置超時間為3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403錯誤
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//得到輸入流
InputStream inputStream = conn.getInputStream();
public static AjaxModel parseExcelForInfo(InputStream inputStream, String fileName, int taskId) {
try {
//創(chuàng)建workbook對象
Workbook workbook = null;
if (fileName.contains(".xlsx")) {
workbook = new XSSFWorkbook(inputStream);
} else if (fileName.contains(".xls")) {
workbook = new HSSFWorkbook(inputStream);
} else {
return AjaxModel.failed(-1, "文件類型不正確");
}
//獲取第一個sheet表
Sheet sheetAt = workbook.getSheetAt(0);
if (sheetAt != null) {
// TODO 校驗(yàn)excel頭
Row headRow = sheetAt.getRow(0);
for (int i = 0; i < BusinessSettlementConstants.TEMPLATE_COULMN.length; i++) {
if (!FileUtil.getCellFormatValue(headRow.getCell(i)).trim().equals(BusinessSettlementConstants.TEMPLATE_COULMN[i])) {
LOGGER.info("parseExcelForInfo excel頭部信息順序不正確,getCellFormatValue(headRow.getCell(i)):{}," +
"BusinessSettlementConstants.TEMPLATE_COULMN[i]:{},taskId:{}", FileUtil.getCellFormatValue(headRow.getCell(i)),
BusinessSettlementConstants.TEMPLATE_COULMN[i], taskId);
return AjaxModel.failed("excel標(biāo)題頭順序不正確:" + FileUtil.getCellFormatValue(headRow.getCell(i)));
}
}
int startRowNum = sheetAt.getFirstRowNum() + 1;
int lastRowNum = sheetAt.getLastRowNum();
LOGGER.info("解析excel開始taskId:{},從【{}】行開始,到第【{}】行結(jié)束", taskId, startRowNum, lastRowNum);
List<Map<String, String>> dataList = new ArrayList<Map<String, String>>();
for (int rowNum = startRowNum; rowNum <= lastRowNum; rowNum++) {
// 每一行數(shù)據(jù)
Row row = sheetAt.getRow(rowNum);
Map<String, String> map = new HashMap<>();
LOGGER.info("parseExcelForInfo row:{}", row);
if (row != null && row.getCell(0) != null && StringUtils.isNotEmpty(row.getCell(0).getStringCellValue()) && row.getCell(2) != null && row.getCell(4) != null) {
LOGGER.info("parseExcelForInfo row:{},cell:{}", row, row.getCell(0));
// 姓名
map.put("userName", FileUtil.getCellFormatValue(row.getCell(0)));
dataList.add(map);
}
}
LOGGER.info("--------------解析完成 dataList:{}", dataList);
if (dataList.size() <= 0) {
return AjaxModel.failed(-1, "解析表格數(shù)據(jù)為空");
}
AjaxModel success = AjaxModel.success();
success.getData().put("dataList", dataList);
return success;
} else {
LOGGER.info("sheet內(nèi)容為空");
return AjaxModel.failed(-1, "表格內(nèi)容為空");
}
} catch (Exception e) {
LOGGER.error("parseExcelForInfo 解析異常", e);
}
return AjaxModel.failed(-1, "解析表格異常");
}
public static String getCellFormatValue(Cell cell) {
cell.setCellType(CellType.STRING);
return cell.getStringCellValue();
}
根據(jù)URL網(wǎng)址獲取輸入流
方法一
//文件訪問路徑 String url = ""; InputStream intstream = new URL(url).openStream();
方法二
public InputStream getInputStreamByUrl(String strUrl) {
HttpURLConnection conn = null;
try {
URL url = new URL(strUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(20 * 1000);
final ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(conn.getInputStream(), output);
return new ByteArrayInputStream(output.toByteArray());
} catch (Exception e) {
logger.error("getInputStreamByUrl 異常,exception is {}", e);
} finally {
try {
if (conn != null) {
conn.disconnect();
}
} catch (Exception e) {
}
}
return null;
}
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
IntelliJ IDEA之高效代碼插件RainBow Brackets詳解
這篇文章主要介紹了IntelliJ IDEA之高效代碼插件RainBow Brackets詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Maven中plugins與pluginManagement的區(qū)別說明
這篇文章主要介紹了Maven中plugins與pluginManagement的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
2021-09-09
基于Java實(shí)現(xiàn)圖形驗(yàn)證碼工具類
這篇文章主要為大家詳細(xì)介紹了如何基于Java實(shí)現(xiàn)圖形驗(yàn)證碼工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
2024-11-11
淺析SpringBoot2底層注解@Conditional@ImportResource
這篇文章主要為大家介紹了SpringBoot2底層注解@Conditional@ImportResource的分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
2022-05-05
mybatis中批量更新多個字段的2種實(shí)現(xiàn)方法
當(dāng)我們使用mybatis的時候,可能經(jīng)常會碰到一批數(shù)據(jù)的批量更新問題,因?yàn)槿绻粭l數(shù)據(jù)一更新,那每一條數(shù)據(jù)就需要涉及到一次數(shù)據(jù)庫的操作,本文主要介紹了mybatis中批量更新多個字段的2種實(shí)現(xiàn)方法,感興趣的可以了解一下
2023-09-09 
