最近在做一个文件上传的组件时,发现在windows下上传文件时没任何问题,但是部署到linux下之后,有时会出现获取不到上传文件的问题,代码如下:
/** * 校验上传的文件大小是否超过struts-config.xml文件中配置的大小 * @param url * @return */ public String checkfilesize(String url) { System.out.println("ReceiptAltAction checkfilesize() url:" + url); String url1 = url.replace("\", "/");//--linux下路径用“/”,不识别;windows下“/”、 “”都行 System.out.println("ReceiptAltAction checkfilesize() url1:" + url1); File f = new File(url1); long s=0L; boolean flag = true; try{ System.out.println("ReceiptAltAction checkfilesize() f.exists: " + f.exists()); if (f.exists()) { FileInputStream fis = null; fis = new FileInputStream(f); s= fis.available(); System.out.println("ReceiptAltAction checkfilesize() file.size: " + s); } else { System.out.println("ReceiptAltAction checkfilesize() run to else: the file " + url +" not exit" ); flag = false; } }catch (Exception e) { System.out.println("ReceiptAltAction checkfilesize() run to Exception..." ); flag = false; System.out.println("文件"+url+"不存在"); } if(s > UploadUtil.DEFAULT_UPLOAD_MAXSIZE*1024*1024){ System.out.println("ReceiptAltAction checkfilesize() the file size greater than 8M..." ); flag = false; } return String.valueOf(flag); }
原因:linux下路径都是正斜杠“/”。java确实支持\,不过只能在windows下使用,linux下只能用/,而windows下/也可以识别。所以以后写程序都用/,不要用\。除非有一点:在找注册表里的键路径时必须用到\。