jspsmartupload的上传下载时中文乱码的解决方案

最近实验室做了一个项目,使用jspsmartupload来实现的文件的上传下载,原来在windows平台运行的挺好,但是后来系统移植到linux平台上,结果在上传或下载的文件名中有中文时就会出现乱码。后来查了网上一些人的解决方案,最彻底的解决办法就是修改jspsmartupload的源码,在upload、download方法处强制指定它的编码格式就可以了。

需要修改SmartUpload.java,修改后的代码如下:

 

package com.jspsmart.upload;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;

public class SmartUpload {
 protected byte m_binArray[];
 protected HttpServletRequest m_request;
 protected HttpServletResponse m_response;
 protected ServletContext m_application;
 private int m_totalBytes;
 private int m_currentIndex;
 private int m_startData;
 private int m_endData;
 private String m_boundary;
 private long m_totalMaxFileSize;
 private long m_maxFileSize;
 private Vector m_deniedFilesList;
 private Vector m_allowedFilesList;
 private boolean m_denyPhysicalPath;

 // private boolean m_forcePhysicalPath;
 private String m_contentDisposition;
 public static final int SAVE_AUTO = 0;
 public static final int SAVE_VIRTUAL = 1;
 public static final int SAVE_PHYSICAL = 2;
 private SmartFiles m_files;
 private SmartRequest m_formRequest;

 private String encoding = "";// Supporting Chinese file name

//改了它的初始化方法,在初始化时显式指定使用的编码格式

 public SmartUpload(String encoding) {
  m_totalBytes = 0;
  m_currentIndex = 0;
  m_startData = 0;
  m_endData = 0;
  m_boundary = ""; // new String();
  m_totalMaxFileSize = 0L;
  m_maxFileSize = 0L;
  m_deniedFilesList = new Vector();
  m_allowedFilesList = new Vector();
  m_denyPhysicalPath = false;
  // m_forcePhysicalPath = false;
  m_contentDisposition = ""; // new String();
  m_files = new SmartFiles();
  m_formRequest = new SmartRequest();

  this.encoding = encoding;
 }

 /**
  * @deprecated Method init is deprecated
  */
 public final void init(ServletConfig servletconfig) throws ServletException {
  m_application = servletconfig.getServletContext();
 }

 /**
  * @deprecated Method service is deprecated
  */
 public void service(HttpServletRequest httpservletrequest,
   HttpServletResponse httpservletresponse) throws ServletException,
   IOException {
  m_request = httpservletrequest;
  m_response = httpservletresponse;
 }

 public final void initialize(ServletConfig servletconfig,
   HttpServletRequest httpservletrequest,
   HttpServletResponse httpservletresponse) throws ServletException {
  m_application = servletconfig.getServletContext();
  m_request = httpservletrequest;
  m_response = httpservletresponse;
 }

 public final void initialize(PageContext pagecontext)
   throws ServletException {
  m_application = pagecontext.getServletContext();
  m_request = (HttpServletRequest) pagecontext.getRequest();
  m_response = (HttpServletResponse) pagecontext.getResponse();
 }

 /**
  * @deprecated Method initialize is deprecated
  */
 public final void initialize(ServletContext servletcontext,
   HttpSession httpsession, HttpServletRequest httpservletrequest,
   HttpServletResponse httpservletresponse, JspWriter jspwriter)
   throws ServletException {
  m_application = servletcontext;
  m_request = httpservletrequest;
  m_response = httpservletresponse;
 }

 public void upload() throws ServletException, IOException,
   SmartUploadException {
  int i = 0;
  // boolean flag = false;
  boolean flag1 = false;
  // boolean flag2 = false;
  long l = 0L;
  // String s = "";//new String();
  // String s2 = "";//new String();
  String s4 = ""; // new String();
  String s5 = ""; // new String();
  String s6 = ""; // new String();
  String s7 = ""; // new String();
  String s8 = ""; // new String();
  String s9 = ""; // new String();
  String s10 = ""; // new String();
  m_totalBytes = m_request.getContentLength();
  m_binArray = new byte[m_totalBytes];
  int j;
  for (; i < m_totalBytes; i += j) {
   try {
    m_request.getInputStream();
    j = m_request.getInputStream().read(m_binArray, i,
      m_totalBytes - i);
   } catch (Exception exception) {
    throw new SmartUploadException("Unable to upload.");
   }
  }

  for (; !flag1 && m_currentIndex < m_totalBytes; m_currentIndex++) {
   if (m_binArray[m_currentIndex] == 13) {
    flag1 = true;
   } else {
    m_boundary = m_boundary + (char) m_binArray[m_currentIndex];

   }
  }
  if (m_currentIndex == 1) {
   return;
  }
  for (m_currentIndex++; m_currentIndex < m_totalBytes; m_currentIndex = m_currentIndex + 2) {
   String s1 = getDataHeader();
   m_currentIndex = m_currentIndex + 2;
   boolean flag3 = s1.indexOf("filename") > 0;
   String s3 = getDataFieldValue(s1, "name");
   if (flag3) {
    s6 = getDataFieldValue(s1, "filename");
    s4 = getFileName(s6);
    s5 = getFileExt(s4);
    s7 = getContentType(s1);
    s8 = getContentDisp(s1);
    s9 = getTypeMIME(s7);
    s10 = getSubTypeMIME(s7);
   }
   getDataSection();
   if (flag3 && s4.length() > 0) {
    if (m_deniedFilesList.contains(s5)) {
     throw new SecurityException(
       "The extension of the file is denied to be uploaded (1015).");
    }
    if (!m_allowedFilesList.isEmpty()
      && !m_allowedFilesList.contains(s5)) {
     throw new SecurityException(
       "The extension of the file is not allowed to be uploaded (1010).");
    }
    if (m_maxFileSize > 0L
      && (long) ((m_endData - m_startData) + 1) > m_maxFileSize) {
     throw new SecurityException(
       "Size exceeded for this file : " + s4 + " (1105).");
    }
    l += (m_endData - m_startData) + 1;
    if (m_totalMaxFileSize > 0L && l > m_totalMaxFileSize) {
     throw new SecurityException(
       "Total File Size exceeded (1110).");
    }
   }
   if (flag3) {
    SmartFile file = new SmartFile();
    file.setParent(this);
    file.setFieldName(s3);
    file.setFileName(s4);
    file.setFileExt(s5);
    file.setFilePathName(s6);
    file.setIsMissing(s6.length() == 0);
    file.setContentType(s7);
    file.setContentDisp(s8);
    file.setTypeMIME(s9);
    file.setSubTypeMIME(s10);
    if (s7.indexOf("application/x-macbinary") > 0) {
     m_startData = m_startData + 128;
    }
    file.setSize((m_endData - m_startData) + 1);
    file.setStartData(m_startData);
    file.setEndData(m_endData);
    m_files.addFile(file);
   } else {
    String s11;
    if (encoding != null & encoding.length() > 0) {
     s11 = new String(m_binArray, m_startData,
       (m_endData - m_startData) + 1, encoding);
    } else {
     s11 = new String(m_binArray, m_startData,
       (m_endData - m_startData) + 1);
    }
    m_formRequest.putParameter(s3, s11);
   }
   if ((char) m_binArray[m_currentIndex + 1] == '-') {
    break;
   }
  }
 }

 public int save(String s) throws ServletException, IOException,
   SmartUploadException {
  return save(s, 0);
 }

 public int save(String s, int i) throws ServletException, IOException,
   SmartUploadException {
  int j = 0;
  if (s == null) {
   s = m_application.getRealPath("/");
   // System.out.println("s == null,m_application.getRealPath:" + s);
  }
  if (s.indexOf("/") != -1) {
   if (s.charAt(s.length() - 1) != '/') {
    s = s + "/";
    // System.out.println("m_application.getRealPath::" + s);
   }
  } else {
   if (s.charAt(s.length() - 1) != '//') {
    s = s + "//";
    // System.out.println("m_application.getRealPath" + s);
   }
  }
  // System.out.println("m_application.getRealPath:::" + s);
  FileNames = new String[m_files.getCount()];
  for (int k = 0; k < m_files.getCount(); k++) {
   if (!m_files.getFile(k).isMissing()) {
    // System.out.println("s + m_files.getFile(k).getFileName():" +
    // s + m_files.getFile(k).getFileName());
    m_files.getFile(k).saveAs(s + m_files.getFile(k).getFileName(),
      i);
    FileNames[j] = s + m_files.getFile(k).getFileName();
    j++;
   }
  }

  return j;
 }

 // Add
 private String[] FileNames;

 public String[] getFileNames() {
  // Method may expose internal representation by returning array
  // Returning an array value stored in one of the object's fields exposes
  // the internal representation of the object.? For classes shared by
  // other untrusted classes, this could potentially be a security issue.?
  // Returning a new copy of the array is better approach in many
  // situations.
  String[] vFileNames = new String[FileNames.length];
  System.arraycopy(FileNames, 0, vFileNames, 0, FileNames.length);
  return vFileNames;
 }

 public int getSize() {
  return m_totalBytes;
 }

 public byte getBinaryData(int i) {
  byte byte0;
  try {
   byte0 = m_binArray[i];
  } catch (Exception exception) {
   throw new ArrayIndexOutOfBoundsException(
     "Index out of range (1005).");
  }
  return byte0;
 }

 public SmartFiles getFiles() {
  return m_files;
 }

 public SmartRequest getRequest() {
  return m_formRequest;
 }

 public void downloadFile(String s) throws ServletException, IOException,
   SmartUploadException {
  downloadFile(s, null, null);
 }

 public void downloadFile(String s, String s1) throws ServletException,
   IOException, SmartUploadException, SmartUploadException {
  downloadFile(s, s1, null);
 }

 public void downloadFile(String s, String s1, String s2)
   throws ServletException, IOException, SmartUploadException {
  downloadFile(s, s1, s2, 65000);
 }

 public void downloadFile(String s, String s1, String s2, int i)
   throws ServletException, IOException, SmartUploadException {
  if (s == null) {
   throw new IllegalArgumentException("File '" + s
     + "' not found (1040).");
  }
  if (s.equals("")) {
   throw new IllegalArgumentException("File '" + s
     + "' not found (1040).");
  }
  if (!isVirtual(s) && m_denyPhysicalPath) {
   throw new SecurityException("Physical path is denied (1035).");
  }
  if (isVirtual(s)) {
   s = m_application.getRealPath(s);
  }
  java.io.File file = new java.io.File(s);
  FileInputStream fileinputstream = new FileInputStream(file);
  long l = file.length();
  // boolean flag = false;
  int k = 0;
  byte abyte0[] = new byte[i];
  if (s1 == null) {
   m_response.setContentType("application/x-msdownload");
  } else {
   if (s1.length() == 0) {
    m_response.setContentType("application/x-msdownload");
   } else {
    m_response.setContentType(s1);
   }
  }
  m_response.setContentLength((int) l);
  m_contentDisposition = m_contentDisposition != null ? m_contentDisposition
    : "attachment;";
  if (s2 == null) {
   m_response.setHeader("Content-Disposition", m_contentDisposition
     + " filename=" + toEncodingString(getFileName(s)));
  } else {
   if (s2.length() == 0) {
    m_response.setHeader("Content-Disposition",
      m_contentDisposition);
   } else {
    m_response.setHeader("Content-Disposition",
      m_contentDisposition + " filename=" + s2);
   }
  }
  while ((long) k < l) {
   int j = fileinputstream.read(abyte0, 0, i);
   k += j;
   m_response.getOutputStream().write(abyte0, 0, j);
  }
  fileinputstream.close();
 }
 /**
  * To avoid the illegal chinese character in file name
  * @param s
  * @return
  */
 public String toEncodingString(String s) {
  if(this.encoding==null||this.encoding.length()==0){
   return s;
  }
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < s.length(); i++) {
   char c = s.charAt(i);
   if (c >= 0 && c <= 255) {
    sb.append(c);
   } else {
    byte[] b;
    try {
     b = Character.toString(c).getBytes(this.encoding);
    } catch (Exception ex) {
     System.out.println(ex);
     b = new byte[0];
    }
    for (int j = 0; j < b.length; j++) {
     int k = b[j];
     if (k < 0)
      k += 256;
     sb.append("%" + Integer.toHexString(k).toUpperCase());
    }
   }
  }
  return sb.toString();
 }

 public void downloadField(ResultSet resultset, String s, String s1,
   String s2) throws ServletException, IOException, SQLException {
  if (resultset == null) {
   throw new IllegalArgumentException(
     "The RecordSet cannot be null (1045).");
  }
  if (s == null) {
   throw new IllegalArgumentException(
     "The columnName cannot be null (1050).");
  }
  if (s.length() == 0) {
   throw new IllegalArgumentException(
     "The columnName cannot be empty (1055).");
  }
  byte abyte0[] = resultset.getBytes(s);
  if (s1 == null) {
   m_response.setContentType("application/x-msdownload");
  } else {
   if (s1.length() == 0) {
    m_response.setContentType("application/x-msdownload");
   } else {
    m_response.setContentType(s1);
   }
  }
  m_response.setContentLength(abyte0.length);
  if (s2 == null) {
   m_response.setHeader("Content-Disposition", "attachment;");
  } else {
   if (s2.length() == 0) {
    m_response.setHeader("Content-Disposition", "attachment;");
   } else {
    m_response.setHeader("Content-Disposition",
      "attachment; filename=" + s2);
   }
  }
  m_response.getOutputStream().write(abyte0, 0, abyte0.length);
 }

 public void fieldToFile(ResultSet resultset, String s, String s1)
   throws ServletException, IOException, SmartUploadException,
   SQLException {
  try {
   if (m_application.getRealPath(s1) != null) {
    s1 = m_application.getRealPath(s1);
   }
   InputStream inputstream = resultset.getBinaryStream(s);
   FileOutputStream fileoutputstream = new FileOutputStream(s1);
   int i;
   while ((i = inputstream.read()) != -1) {
    fileoutputstream.write(i);
   }
   fileoutputstream.close();
  } catch (Exception exception) {
   throw new SmartUploadException(
     "Unable to save file from the DataBase (1020).");
  }
 }

 private String getDataFieldValue(String s, String s1) {
  String s2 = ""; // = new String();
  String s3 = ""; // = new String();
  int i = 0;
  // boolean flag = false;
  // boolean flag1 = false;
  // boolean flag2 = false;
  s2 = s1 + "=" + '"';
  i = s.indexOf(s2);
  if (i > 0) {
   int j = i + s2.length();
   int k = j;
   s2 = "/"";
   int l = s.indexOf(s2, j);
   if (k > 0 && l > 0) {
    s3 = s.substring(k, l);
   }
  }
  return s3;
 }

 private String getFileExt(String s) {
  String s1; // = new String();
  int i = 0;
  int j = 0;
  if (s == null) {
   return null;
  }
  i = s.lastIndexOf('.') + 1;
  j = s.length();
  s1 = s.substring(i, j);
  if (s.lastIndexOf('.') > 0) {
   return s1;
  } else {
   return "";
  }
 }

 private String getContentType(String s) {
  String s1 = ""; // = new String();
  String s2 = ""; // = new String();
  int i = 0;
  // boolean flag = false;
  s1 = "Content-Type:";
  i = s.indexOf(s1) + s1.length();
  if (i != -1) {
   int j = s.length();
   s2 = s.substring(i, j);
  }
  return s2;
 }

 private String getTypeMIME(String s) {
  // String s1 = new String();
  int i = 0;
  i = s.indexOf("/");
  if (i != -1) {
   return s.substring(1, i);
  } else {
   return s;
  }
 }

 private String getSubTypeMIME(String s) {
  // String s1 = new String();
  // boolean flag = false;
  int i = 0;
  i = s.indexOf("/") + 1;
  if (i != -1) {
   int j = s.length();
   return s.substring(i, j);
  } else {
   return s;
  }
 }

 private String getContentDisp(String s) {
  // String s1 = new String();
  String s1 = "";
  int i = 0;
  int j = 0;
  i = s.indexOf(":") + 1;
  j = s.indexOf(";");
  s1 = s.substring(i, j);
  return s1;
 }

 private void getDataSection() {
  // boolean flag = false;
  // String s = "";
  // String s = new String();
  int i = m_currentIndex;
  int j = 0;
  int k = m_boundary.length();
  m_startData = m_currentIndex;
  m_endData = 0;
  while (i < m_totalBytes) {
   if (m_binArray[i] == (byte) m_boundary.charAt(j)) {
    if (j == k - 1) {
     m_endData = ((i - k) + 1) - 3;
     break;
    }
    i++;
    j++;
   } else {
    i++;
    j = 0;
   }
  }
  m_currentIndex = m_endData + k + 3;
 }

 private String getDataHeader() throws UnsupportedEncodingException {
  // boolean flag = false;
  int i = m_currentIndex;
  int j = 0;
  for (boolean flag1 = false; !flag1;) {
   if (m_binArray[m_currentIndex] == 13
     && m_binArray[m_currentIndex + 2] == 13) {
    flag1 = true;
    j = m_currentIndex - 1;
    m_currentIndex = m_currentIndex + 2;
   } else {
    m_currentIndex++;
   }
  }
  String s;
  if (encoding != null && encoding.length() > 0) {
   s = new String(m_binArray, i, (j - i) + 1, encoding);
  } else {
   s = new String(m_binArray, i, (j - i) + 1);
  }

  return s;
 }

 private String getFileName(String s) {
  // String s1 = ""; // = new String();
  // String s2 = ""; // = new String();
  // boolean flag = false;
  // boolean flag1 = false;
  // boolean flag2 = false;
  int i = 0;
  i = s.lastIndexOf('/');
  if (i != -1) {
   return s.substring(i + 1, s.length());
  }
  i = s.lastIndexOf('//');
  if (i != -1) {
   return s.substring(i + 1, s.length());
  } else {
   return s;
  }
 }

 public void setDeniedFilesList(String s) throws ServletException,
   IOException, SQLException {
  // String s1 = "";
  if (s != null) {
   String s2 = "";
   for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) == ',') {
     if (!m_deniedFilesList.contains(s2)) {
      m_deniedFilesList.addElement(s2);
     }
     s2 = "";
    } else {
     s2 = s2 + s.charAt(i);
    }
   }

   // if(s2 != "")
   if (!s2.equals("")) {
    m_deniedFilesList.addElement(s2);
   }
  } else {
   m_deniedFilesList = null;
  }
 }

 public void setAllowedFilesList(String s) {
  // String s1 = "";
  if (s != null) {
   String s2 = "";
   for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) == ',') {
     if (!m_allowedFilesList.contains(s2)) {
      m_allowedFilesList.addElement(s2);
     }
     s2 = "";
    } else {
     s2 = s2 + s.charAt(i);
    }
   }
   // if(s2 != "")
   if (!s2.equals("")) {
    m_allowedFilesList.addElement(s2);
   }
  } else {
   m_allowedFilesList = null;
  }
 }

 public void setDenyPhysicalPath(boolean flag) {
  m_denyPhysicalPath = flag;
 }

 public void setForcePhysicalPath(boolean flag) {
  // m_forcePhysicalPath = flag;
 }

 public void setContentDisposition(String s) {
  m_contentDisposition = s;
 }

 public void setTotalMaxFileSize(long l) {
  m_totalMaxFileSize = l;
 }

 public void setMaxFileSize(long l) {
  m_maxFileSize = l;
 }

 protected String getPhysicalPath(String s, int i) throws IOException {
  String s1 = ""; // new String();
  String s2 = ""; // new String();
  String s3 = ""; // new String();
  boolean flag = false;
  s3 = System.getProperty("file.separator");
  if (s == null) {
   throw new IllegalArgumentException(
     "There is no specified destination file (1140).");
  }
  if (s.equals("")) {
   throw new IllegalArgumentException(
     "There is no specified destination file (1140).");
  }
  if (s.lastIndexOf("//") >= 0) {
   s1 = s.substring(0, s.lastIndexOf("//"));
   s2 = s.substring(s.lastIndexOf("//") + 1);
  }
  if (s.lastIndexOf("/") >= 0) {
   s1 = s.substring(0, s.lastIndexOf("/"));
   s2 = s.substring(s.lastIndexOf("/") + 1);
  }
  s1 = s1.length() != 0 ? s1 : "/";
  java.io.File file = new java.io.File(s1);
  if (file.exists()) {
   flag = true;
  }
  if (i == 0) {
   if (isVirtual(s1)) {
    s1 = m_application.getRealPath(s1);
    if (s1.endsWith(s3)) {
     s1 = s1 + s2;
    } else {
     s1 = s1 + s3 + s2;
    }
    return s1;
   }
   if (flag) {
    if (m_denyPhysicalPath) {
     throw new IllegalArgumentException(
       "Physical path is denied (1125).");
    } else {
     return s;
    }
   } else {
    throw new IllegalArgumentException(
      "This path does not exist (1135).");
   }
  }
  if (i == 1) {
   if (isVirtual(s1)) {
    s1 = m_application.getRealPath(s1);
    if (s1.endsWith(s3)) {
     s1 = s1 + s2;
    } else {
     s1 = s1 + s3 + s2;
    }
    return s1;
   }
   if (flag) {
    throw new IllegalArgumentException(
      "The path is not a virtual path.");
   } else {
    throw new IllegalArgumentException(
      "This path does not exist (1135).");
   }
  }
  if (i == 2) {
   if (flag) {
    if (m_denyPhysicalPath) {
     throw new IllegalArgumentException(
       "Physical path is denied (1125).");
    } else {
     return s;
    }
   }
   if (isVirtual(s1)) {
    throw new IllegalArgumentException(
      "The path is not a physical path.");
   } else {
    throw new IllegalArgumentException(
      "This path does not exist (1135).");
   }
  } else {
   return null;
  }
 }

 public void uploadInFile(String s) throws IOException, SmartUploadException {
  // boolean flag = false;
  int i = 0;
  int j = 0;
  if (s == null) {
   throw new IllegalArgumentException(
     "There is no specified destination file (1025).");
  }
  if (s.length() == 0) {
   throw new IllegalArgumentException(
     "There is no specified destination file (1025).");
  }
  if (!isVirtual(s) && m_denyPhysicalPath) {
   throw new SecurityException("Physical path is denied (1035).");
  }
  i = m_request.getContentLength();
  m_binArray = new byte[i];
  int k;
  for (; j < i; j += k) {
   try {
    k = m_request.getInputStream().read(m_binArray, j, i - j);
   } catch (Exception exception) {
    throw new SmartUploadException("Unable to upload.");
   }
  }

  if (isVirtual(s)) {
   s = m_application.getRealPath(s);
  }
  try {
   java.io.File file = new java.io.File(s);
   FileOutputStream fileoutputstream = new FileOutputStream(file);
   fileoutputstream.write(m_binArray);
   fileoutputstream.close();
  } catch (Exception exception1) {
   throw new SmartUploadException(
     "The Form cannot be saved in the specified file (1030).");
  }
 }

 private boolean isVirtual(String s) {
  if (m_application.getRealPath(s) != null) {
   java.io.File file = new java.io.File(m_application.getRealPath(s));
   return file.exists();
  } else {
   return false;
  }
 }
}

真正解决jspSmartUpload组件上传下载文件中文乱码问题。以前在网上也找过!!!下载了些,都没能解决中文乱码问题!自己改了源代码,并做成jar包,直接用就可以。 另,我把File()类 改成了 SmartFile()类。详情请下载。 另我的Blog有详细描述 http://blog.youkuaiyun.com/cartonwang/archive/2008/10/28/3168114.aspx 用朋友问到:译后的结果啊,怎么用啊 ------------------------------------------- 我看了下,给的是jar包。直接用就好了。用法和原版的差不多。稍微有点不同。原版:com.jspsmart.upload.File 我的:com.jspsmart.upload.SmartFile 原版的是File类,我的是SmartFile类。另,http://download.youkuaiyun.com/source/796632 中有上传文件不刷新页面的方法。我浦发银行的项目就是用这些方法。很好用。 ------------------------------------------------ gylsm发表的评论 真是晕死,用原版的上传还是支持中文的,你的连上传都成了乱码了,又没讲下你的用法和原版的区别,都不知道可不可以用 --------------------------------------------------------------------------- 我上面已经讲了吧,其实和原版的没有什么区别的,唯一一个地方要注意的是File()类我改成SmartFile()了,你用该类,改成SmartFile()类就好了。 如果还不能用,很可能是你没有把原来的Jar包给删除。 间:2009-04-09 18:45:48 来自:61.142.100.* ming100star发表的评论 谢谢伟大的楼主!! 间:2009-04-06 15:48:04 来自:220.249.99.* zwei27发表的评论 朋友太谢谢你了,我到网上怎么都找不到,你帮我搞定,SKS
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值