最近在做一个文件上传的组件时,发现在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/也可以识别。所以以后写程序都用/,不要用\\。除非有一点:在找注册表里的键路径时必须用到\\。