关于windows和Linux的读取文件路径问题

本地操作系统是windows ,测试/生产服务器是linux系统。svn 只是一个代码版本控制,类似于文件服务器,把代码都放在svn上管理。发版就从svn上更新到最全的测试好的代码,打成war包,发布到 测试/生产服务器。
但是今天呢 在导出的时候遇到了一个问题,在本地可以导出,在生产服务器不能导出。后来发现是 系统不一样导致的问题。具体实验如下:
本地环境 windows系统

	request.getServletContext().getRealPath("/")+"\\template\\FrameProList.xls"; //这个是windows版本
	request.getServletContext().getRealPath("/")+"template/FrameProList.xls"; //这个是服务器版本,Linux系统

我发布到生产的时候用的是本地windows版本,所以报错找不到文件。所以需要改过来。
报错:C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxxcrm/template\\FrameProList.xls(No such file or directory)–linux系统

可以看出 Windows 路径使用"\" , Linux路径 使用 "/"
自己又进行了一些实验:
windows系统

C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web/template/FrameProList.xls

这种其实也是可以的,把路径粘贴到 本地路径进行搜索,依然找得到,enter的一瞬间,windows系统会把单个的“\”转换为
“/”,所以可以找到文件。但是 xxxxx.crm.web\/template 这种,windows系统就无法转换,只能转换单个。具体可以自己在电脑上测试。

结果放下面:

request.getServletContext().getRealPath("/")+"\\template\\FrameProList.xls"; //本地windows版本
	  C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web\\template\FrameProList.xls
	=C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web\+\template\FrameProList.xls
		可以访问到文件

我改成这样:

 request.getServletContext().getRealPath("/")+"/template/FrameProList.xls"; //本地windows版本
   		C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web\/template/FrameProList.xls
	  =C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web\+/template/FrameProList.xls
	  	这样竟然也可以访问到。但是把路径抽出来,放到本地搜索,是搜不出来的。这个不明白。

具体代码如下:

/**
*导出产品清单数据信息--产品清单
*/
@RequestMapping("exportProList.do")
@ResponseBody
public ResponseEntity out( FrameAgreementProListModel model ,HttpServletRequest request,HttpServletResponse response )throws Exception{
		if(StringUtils.isNotNullOrEmptyStr(model.getFrameId())){
				throw new ExceptionWithCode("frame.0001");//请提供框架Id
		}
		//查询当前框架下的产品清单列表
		model.setLoginName(SystemUtils.getUserModel().getLoginName());
		model.setPageSize(100000);
		List  proList =  mapper.selectFrameProList(model);
		//指明-导出文件的模板
		String templateFile = request.getServletContext().getRealPath("/")+“template/FrameProlist.xls”;//服务器版本-linux系统
		//String templateFile =  request.getServletContext().getRealPath("/")+“\\template\\FrameProlist.xls”;//本地windows版本
		logger.info("模板文件路径为:"+templateFile);
		//框架方法:导出方法------把list列表数据读取到Excel模板文件中。
		return readList(proList, templateFile);
}
/**
*list--Excel
*/
public ResponseEntity readList(List list,String templateFile)throws Exception{
	//如何把一个list数据读取到一个Excel文件中
	
	//1:获取Excel文件对象
	ByteArrayOutputStream  baos = new ByteArrayOutputStream();
	Workbook wb =  Workbook.getWorkbook(new File( templateFile ));
	WritableWorkbook wwb = Workbook.createWorkbook(baos,wb);
	
try{	WritableSheet sheet = wwb.getSheet(0);
	Cell cell1 = ExcelUtils.getCellByValue(sheet,"行号");
	Cell cell2 = ExcelUtils.getCellByValue(sheet,"产品名称");
	Cell cell3 = ExcelUtils.getCellByValue(sheet,"内部型号");
	Cell cell4 = ExcelUtils.getCellByValue(sheet,"外部型号");
	Cell cell5 = ExcelUtils.getCellByValue(sheet,"物料号");
	Cell cell6 = ExcelUtils.getCellByValue(sheet,"数量");
	Cell cell7 = ExcelUtils.getCellByValue(sheet,"意向单价");
	Cell cell8 = ExcelUtils.getCellByValue(sheet,"实际质保期");
	Cell cell9 = ExcelUtils.getCellByValue(sheet,"标准质保期");
	Cell cell10 = ExcelUtils.getCellByValue(sheet,"单产品毛利");

	int row_i = cell1.getRow(); //0
	for(FrameAgreementProListModel  model : list){
		row_i++;
		Label label1 = new Label( cell1.getColumn(),row_i,String.format("%d",row_i)  );
		Label label2 = new Label( cell2.getColumn(),row_i,model.getProName()  );
		Label label3 = new Label( cell3.getColumn(),row_i,model.getInnerNum()  );
		Label label4 = new Label( cell4.getColumn(),row_i,model.getOuterNum()  );
		Label label5 = new Label( cell5.getColumn(),row_i,model.getPartNum()  );
		Label label6 = new Label( cell6.getColumn(),row_i,model.getQuantity()  );
		Label label7 = new Label( cell7.getColumn(),row_i,model.getSalesPrice()  );
		Label label8 = new Label( cell8.getColumn(),row_i,model.getActualWP()  );
		Label label9 = new Label( cell9.getColumn(),row_i,model.getStandardWP()  );
		Label label10 = new Label( cell10.getColumn(),row_i,model.getGrossCal()  );

		sheet.addCell(label1);
		sheet.addCell(label2);
		sheet.addCell(label3);
		sheet.addCell(label4);
		sheet.addCell(label5);
		sheet.addCell(label6);
		sheet.addCell(label7);
		sheet.addCell(label8);
		sheet.addCell(label9);
		sheet.addCell(label10);
	}
	
}finally{
	wwb.write();
	wwb.close();
	wb.close();
	baos.close()
}	

//设置导出的Excel文件名
HttpHeaders headers = new HttpHeaders();
headers.setContentType(Media.APPLICATION_OCTET_STREAM);
headers.add("Content-disposition","attachment;filename="+URLEncoder.encode(String.format("%s.xls",SystemUtils.getMessages().get("frame.sheet")),"utf-8" ));
return new ResponseEntity(baos.toByteArray(),headers,HttpStatus.OK);
}

你可能感兴趣的:(Java)