最近在做一個文件上傳的組件時,發現在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下/也可以識別。所以以后寫程序都用/,不要用\\。除非有一點:在找注冊表里的鍵路徑時必須用到\\。