java 远程文件url 转为输入流
1
2
3
4
5
6
7
8
|
URL url = new URL(fileUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout( 3 * 1000 );
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty( "User-Agent" , "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)" );
//得到输入流
InputStream inputStream = conn.getInputStream();
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
public static AjaxModel parseExcelForInfo(InputStream inputStream, String fileName, int taskId) {
try {
//创建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 校验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标题头顺序不正确:" + FileUtil.getCellFormatValue(headRow.getCell(i)));
}
}
int startRowNum = sheetAt.getFirstRowNum() + 1 ;
int lastRowNum = sheetAt.getLastRowNum();
LOGGER.info( "解析excel开始taskId:{},从【{}】行开始,到第【{}】行结束" , taskId, startRowNum, lastRowNum);
List<Map<String, String>> dataList = new ArrayList<Map<String, String>>();
for ( int rowNum = startRowNum; rowNum <= lastRowNum; rowNum++) {
// 每一行数据
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 , "解析表格数据为空" );
}
AjaxModel success = AjaxModel.success();
success.getData().put( "dataList" , dataList);
return success;
} else {
LOGGER.info( "sheet内容为空" );
return AjaxModel.failed(- 1 , "表格内容为空" );
}
} catch (Exception e) {
LOGGER.error( "parseExcelForInfo 解析异常" , e);
}
return AjaxModel.failed(- 1 , "解析表格异常" );
}
|
1
2
3
4
|
public static String getCellFormatValue(Cell cell) {
cell.setCellType(CellType.STRING);
return cell.getStringCellValue();
}
|
根据URL网址获取输入流
方法一
1
2
3
|
//文件访问路径
String url = "" ;
InputStream intstream = new URL(url).openStream();
|
方法二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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 ;
}
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/kangzhuang521/article/details/104491488