關於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<byte[]> 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<FrameAgreementProListModel >  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<byte[]> readList(List<FrameAgreementProListModel > 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<byte[]>(baos.toByteArray(),headers,HttpStatus.OK);
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章