或者做一个setXXX(),只要在用时随时为上传路径付值。

解决方案 »

  1.   

    也可以设置在一个properties文件中,每次用ResourceBundle读一下就可以了。这样的好处是你的程序不用改动。
      

  2.   

    我可以由jvm所调用的任何一个jar文件,得到它的path。java.lang.Class里面有方法。想获得用户路径用  System.getProperty("user.dir");
      

  3.   

    package mshtang.sql;/**
     * <p>Title: SQLWithAttacInsertAction</p>
     * <p>Description: 当有附件的上载,SQL语句的构造适用本类。
     * 前提:1.数据库字段名与附件上载域名相同;2.数据库中不实际保存附件,
     * 而只保存附件的存放路径;3.SmartUpload先初始化,即必须进行下列步骤:
     * SmartUpload upload = new SmartUpload();upload.initalize(pageContext);
     * upload.upload();这些步骤由类的使用者完成;4.在想得到SQL语句之前,
     * 必须先设置文件的上载路径,即setDirectory("\\a\\b\\");可设置一级或
     * 多极目录。该方法暂时用于windows平台</p>
     * <p>Copyright: 厦门一方软件公司版权所有 (c) 2002</p>
     * <p>Company: 厦门一方软件公司</p>
     * @author 唐明胜
     * @version 1.0
     */
    import mshtang.StringAction;
    import mshtang.sql.SQLNormalAction;
    import java.util.Enumeration;
    import com.jspsmart.upload.*;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.ServletContext;
    import java.io.File;
    import java.sql.*;
    import java.util.ArrayList;
    public class SQLAttachInsert
    {  private String tempInsert;  private StringAction S;//本类中将使用到的字符串操作对象;
      private String dir;//有外部使用者决定的附件保存路径;  private String[] attachPath;
      private String[] attachField;  private String insert_Field;
      private String insert_Value;  public SQLAttachInsert()
      {
        S = new StringAction();
      }  public void setDirectory(String directory)
      {
        dir = directory;
      }  /*上载附件,其实其与SQL语句构造无关,但为了保证数据库中
      的保存值与实际存放路径一致,则必须有该前期工作*/
      protected void uploadAttach(SmartUpload upload, PageContext pageContext)
      {
        ServletContext servletContext = pageContext.getServletContext();
        String realPath = servletContext.getRealPath("/");
        String relativePath = dir;
        java.io.File javaFile = new java.io.File(realPath, relativePath);
        try
        {
          if(!javaFile.exists())
          {
            javaFile.mkdirs();
          }
        }
        catch(Exception ex)
        {
          ex.printStackTrace();
        }
        try
        {
          upload.save(relativePath);
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
      }  /*设置附件信息:包括附件的保存字段以及给字段的值,每个字段可能多值,
      其由spliter分开。
      */
      private void setAttachmentInfo(SmartUpload upload, String newAttachFieldList, String spliter)//set the fieldname and the save path of the attachment
      {
        if(newAttachFieldList.equals(""))
        {
          attachField = null;
          attachPath = null;
        }
        else
        {
          String[] attachFieldArray = S.stringSplit(newAttachFieldList, spliter);
          String[] attachPathArray = new String[attachFieldArray.length];
          com.jspsmart.upload.Files files = upload.getFiles();
          Enumeration fileEnum = files.getEnumeration();
          String fileDirectory;
          String fileName;
          String fieldName;
          while(fileEnum.hasMoreElements())
          {
            fileDirectory = dir;
            com.jspsmart.upload.File file = (com.jspsmart.upload.File)fileEnum.nextElement();
            fileName = file.getFileName();
            fieldName = file.getFieldName();
            for(int i = 0; i < attachFieldArray.length; i++)
            {
              if(fieldName.equals(attachFieldArray[i]))
              {
                if(fileName != null && !fileName.equals(""))
                {
                  fileDirectory += fileName;
                  if(attachPathArray[i] == null)
                  {
                    attachPathArray[i] = "";
                  }
                  if(!S.isContains(attachPathArray[i], fileDirectory))
                  {
                    attachPathArray[i] += fileDirectory + spliter;
                  }
                }
              }
            }
          }
          attachField = attachFieldArray;//设置保存附件路径的数据库字段列表。
          attachPath = attachPathArray;//设置上述字段的值列表。
        }
      }
      /*设置除附件外的其他域值相关信息:同样包括字段及其值*/
      private void setNormalFieldInfo(SmartUpload upload, String tableName, String ignoreFieldList, String spliter)//spliter的含义为如果某个域提交多值,则多值间采用spliter分隔。
      {
        if(tableName == null || tableName.equals(""))
        {
          return;
        }
        Enumeration nameEnum = upload.getRequest().getParameterNames();
        String insertField = "insert into " + tableName + "(";
        tempInsert = insertField;
        String insertValue = "values (";
        String temp_Field = insertField;
        String temp_Value = insertValue;
        int count = 0;
        while(nameEnum.hasMoreElements())
        {
          String name = nameEnum.nextElement().toString().trim();
          if(!ignoreFieldList.equals("") && S.isContains(ignoreFieldList, name))
          {
            continue;
          }
          String valueArray[] = upload.getRequest().getParameterValues(name);
          String value = S.getArrayValue(valueArray, spliter, false);
          if(value != null && !value.equals(""))
          {
            insertField += name + ", ";
            insertValue += "'" + value + "', ";
          }
          System.out.println("insertField=" + insertField);
        }
        insert_Field = insertField;
        insert_Value = insertValue;
      }
      /*将附件域与一般域构造的SQL组合起来*/
      private String constructInsertSQL()
      {
        String[] attachPathArray = attachPath;
        String[] attachFieldArray = attachField;
        if(attachPathArray != null)
        {
          for(int i = 0; i < attachFieldArray.length; i++)
          {
            if(attachPathArray[i] != null && !attachPathArray[i].equals(dir))
            {
              insert_Field += attachFieldArray[i] + ", ";
              insert_Value += "'" + attachPathArray[i] + "', ";
            }
          }
        }
        if(!insert_Field.equals(tempInsert))
        {
          insert_Field = insert_Field.trim();
          insert_Field = insert_Field.substring(0, insert_Field.length() - 1) + ") ";
          insert_Value = insert_Value.trim();
          insert_Value = insert_Value.substring(0, insert_Value.length() - 1) + ")";
          insert_Field += insert_Value;
        }
        else
        {
          insert_Field = "";
        }
        return insert_Field;
      }  /**功能:最后由外部调用,返回完整的SQL
       *
       * @param upload
       * @param tableName
       * @param pageContext
       * @param attachFieldList
       * @param ignoreFieldList
       * @param spliter
       * @return
       */
      public String getInsertSQL(SmartUpload upload, String tableName, PageContext pageContext, String attachFieldList, String ignoreFieldList, String spliter)
      {
        uploadAttach(upload, pageContext);
        setAttachmentInfo(upload, attachFieldList, spliter);
        setNormalFieldInfo(upload, tableName, ignoreFieldList, spliter);
        return constructInsertSQL();
      }  /**功能:方法重载,多值间以分号分隔。
       *
       * @param upload
       * @param tableName
       * @param pageContext
       * @param attachFieldList
       * @param ignoreFieldList
       * @return
       */
      public String getInsertSQL(SmartUpload upload, String tableName, PageContext pageContext, String attachFieldList, String ignoreFieldList)
      {
        return getInsertSQL(upload, tableName, pageContext, attachFieldList, ignoreFieldList, ";");
      }  /**功能:方法重载。没有需要忽略的域。
       *
       * @param upload
       * @param tableName
       * @param pageContext
       * @param attachFieldList
       * @return
       */
      public String getInsertSQL(SmartUpload upload, String tableName, PageContext pageContext, String attachFieldList)
      {
        return getInsertSQL(upload, tableName, pageContext, attachFieldList, "", ";");
      }  public String getinsertSQL(SmartUpload upload, PageContext pageContext, String tableName, String ignoreFieldList)
      {
        return getInsertSQL(upload, tableName, pageContext, "", ignoreFieldList, ";");
      }
      /**功能:方法重载。没有附件上载域以及需要忽略的域。功能同SQLNormalAction中的getInsertSQL(HttpServletRequest request, String tableName).
       *
       * @param upload
       * @param tableName
       * @param pageContext
       * @return
       */
      public String getInsertSQL(SmartUpload upload, String tableName, PageContext pageContext)
      {
        r
      

  4.   

    上面用到的东西需要smartUpload