首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法从本地目录读取excel文件

无法从本地目录读取excel文件
EN

Stack Overflow用户
提问于 2019-05-22 18:00:16
回答 1查看 90关注 0票数 -1

我已经在本地目录上传了excel文件,但问题是我无法从那个位置读取它。

我使用的是Struts1.1,db2。

代码语言:javascript
复制
package mj.eps.action;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.Vector;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.mj.eps.dto.business.auction.UploadObject;
import com.mj.eps.dto.training.IndexValueReportObject;
import com.mj.eps.framework.util.FileScaner;
import com.mj.eps.framework.util.IConstant;

public class IndexValueAction extends EPSBaseAction{


    public IndexValueAction() {
        super();

    }

    @SuppressWarnings("unchecked")
    @Override
    public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response)
        throws Exception {

        Vector<String> vector = new Vector<String>();
        ActionErrors errors = new ActionErrors();
        ActionForward forward = new ActionForward(); 



        try{


            String contentType = request.getContentType();



            if ((contentType != null)
                && (contentType.indexOf("multipart/form-data") >= 0)) {

                DataInputStream in =
                    new DataInputStream(request.getInputStream());
                int formDataLength = request.getContentLength();


                byte dataBytes[] = new byte[formDataLength];
                int byteRead = 0;
                int totalBytesRead = 0;
                while (totalBytesRead < formDataLength) {
                    byteRead =
                        in.read(dataBytes, totalBytesRead, formDataLength);
                    totalBytesRead += byteRead;
                }
                String file = new String(dataBytes);

                try {

                    String saveFile = file.substring(file.indexOf("filename=\"") + 10);

                    saveFile = saveFile.substring(0, saveFile.indexOf("\n"));                       
                    saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,   saveFile.indexOf("\""));                        
                    int lastIndex = contentType.lastIndexOf("=");

                    String boundary =
                        contentType.substring(
                            lastIndex + 1,
                            contentType.length());


                    int pos;
                    pos = file.indexOf("filename=\"");

                    pos = file.indexOf("\n", pos) + 1;

                    pos = file.indexOf("\n", pos) + 1;

                    pos = file.indexOf("\n", pos) + 1;

                    int boundaryLocation = file.indexOf(boundary, pos) - 4;

                    int startPos = ((file.substring(0, pos)).getBytes()).length;
                    int endPos =
                        (
                            (file.substring(0, boundaryLocation))
                                .getBytes())
                                .length;

                    Vector<IndexValueReportObject> indexObjectVector = new Vector<IndexValueReportObject>();


                    Date dt = new Date();
                    SimpleDateFormat df = new SimpleDateFormat();
                    df.applyPattern("dd-MM-yy hh-mm-ss");
                    saveFile =  saveFile.substring(0, saveFile.indexOf("."))+ "-"+ df.format(dt)+ ".xls";

                    String uploadFilePath = ""; 
                    ServletContext sc1 = request.getSession().getServletContext();
                    Properties properties = new Properties();
                    String realPath1 = sc1.getRealPath("serverPath.properties");

                    FileInputStream fis = new FileInputStream(realPath1);
                    properties.load(fis);
                    uploadFilePath = properties.getProperty("fileUpload.path");                     
                    FileOutputStream fileOut =  new FileOutputStream(uploadFilePath + saveFile);                        
                    System.out.println(uploadFilePath); 
                    if(endPos > dataBytes.length )
                        endPos = dataBytes.length;

                    fileOut.write(dataBytes, startPos, (endPos - startPos));

                    fileOut.flush();
                    fileOut.close();

                    Vector<String[]> rowVector = new Vector<String[]>();
                    Vector<Object> errorVector = new Vector<Object>();
                    UploadObject uploadObject = new UploadObject();
                    int errorId=0;
                    try {



                        File outFile = new File(uploadFilePath  + saveFile);            
                        ServletConfig config = getServlet();            
                        ServletContext sc = config.getServletContext();
                        boolean retVal = false;
                        boolean exists = true;              
                        String filepath = outFile.getAbsolutePath();

                        String realPath = sc.getRealPath("virusCheck.properties");

                        exists = FileScaner.loadProperty(realPath);

                        if (exists) {
                            retVal = FileScaner.checkVirus(realPath, filepath);

                            if (!retVal) {
                                FileScaner.cleanFile(filepath);                 
                                errors.add(
                                    ActionErrors.GLOBAL_ERROR,
                                    new ActionError(
                                        "errors.dynamic",
                                        "<li>Virus found!!"));
                            }
                            if (retVal) {

                                retVal = FileScaner.checkFileSign(filepath);

                                if (!retVal) {
                                    FileScaner.cleanFile(filepath);                 
                                    errors.add(
                                        ActionErrors.GLOBAL_ERROR,
                                        new ActionError(
                                            "errors.dynamic",
                                            "<li>File type not supported!!"));
                                }
                            }
                        }
                        else {
                        }
                        if (retVal) {
                        }
                        if (errors.isEmpty())
                        {

                        ***FileInputStream inputStream=new FileInputStream(uploadFilePath + saveFile);                                      

                        Workbook w = Workbook.getWorkbook(inputStream);

                        Sheet read_sheet = w.getSheet(0);***

                        int rows=read_sheet.getRows();


                        for (int j=1;j<rows;j++){
                                String[] fields=new String[4];

                            for(int i=0;i<fields.length;i++)
                            {
                                Cell cell=read_sheet.getCell(i,j);
                                fields[i]=cell.getContents().trim();
                                if(fields[0] != null ){
                                    try{
                                        if (fields[i].indexOf(".") > 0) {
                                            if (i != 1) {
                                                fields[i] = fields[i];
                                            }else  {
                                                fields[i].substring(0, fields[i].indexOf("."));
                                            } 
                                        }
                                    }
                                    catch(Exception e1)
                                    {
                                        int k=i+1;
                                        errorVector.add("Invalid data at field "+k);
                                        System.out.println(" err1 :" + e1.toString());
                                        errorId = 1;
                                    }
                                }


                            }

                            if(!(fields[0] == null || (fields[0].trim().equals(""))))
                            {
                                rowVector.add(fields);
                            }
                            else{
                                break;
                            }                           
                        }
                        uploadObject.setErrorId(errorId);
                        uploadObject.setErrorVector(errorVector);
                        uploadObject.setRowVector(rowVector);

                        errorId = uploadObject.getErrorId();
                        rowVector = uploadObject.getRowVector();
                        errorVector = uploadObject.getErrorVector();

                        if (errorId == 0) {
                            int row = 0;
                            if (rowVector.size() > 0) {
                                for (int i = 0; i < rowVector.size(); i++) {
                                    IndexValueReportObject indexValueReportObj =
                                        new IndexValueReportObject();




                                    String[] fields =
                                        rowVector.elementAt(i);

                                    System.out.println("abc>>>>>"+fields[0]);
                                    System.out.println("abc>>>>>>>>>>>>>"+fields[1]);
                                    System.out.println("abc>>>>>>>>>>>>>>>>>"+fields[2]);
                                    System.out.println("abc>>>>>>>>>>>>>>>>>>>>>>>"+fields[3]);

                                    try{
                                    indexValueReportObj                                         
                                        .setDate(
                                        Timestamp.valueOf(fields[0]));
                                    }catch (Exception e1)
                                    {
                                        row = i + 1;
                                        vector.add("Invalid Date at row " + (row+1));
                                    }
                                    try{
                                    indexValueReportObj                                         
                                        .setPlatts(
                                        new BigDecimal(fields[1]));
                                    }catch (Exception e1)
                                    {
                                        row = i + 1;
                                        vector.add("Invalid Platts Value at row " + (row+1));
                                    }
                                    try{
                                    indexValueReportObj                                         
                                        .setArgus(
                                                new BigDecimal(fields[2]));
                                    }catch (Exception e1)
                                    {
                                        row = i + 1;
                                        vector.add("Invalid Argus Value at row " + (row+1));
                                    }
                                    try{
                                    indexValueReportObj                                         
                                        .setTsi(
                                                new BigDecimal(fields[3]));
                                    }catch (Exception e1)
                                    {
                                        row = i + 1;
                                        vector.add("Invalid TSI value at row " + (row+1));
                                    }


                                    indexObjectVector.add(
                                            indexValueReportObj);
                                }
                            } else {
                                vector.add(
                                    "No Bidder is created in the excel file ");
                            }
                        } else {

                            for (int k = 0; k < errorVector.size(); k++) {
                                String errorDescription =
                                    (String) errorVector.get(k);

                                vector.add(errorDescription);
                            }

                        }
                    }
                } catch (Exception e1) {

                        errorId = uploadObject.getErrorId();
                        rowVector = uploadObject.getRowVector();
                        errorVector = uploadObject.getErrorVector();


                        for (int k = 0; k < errorVector.size(); k++) {
                            String errorDescription =
                                (String) errorVector.get(k);

                            vector.add(errorDescription);
                        }
                    }
                    String filePathAndName=uploadFilePath + saveFile;

                    System.out.println("indexObjectVector"+indexObjectVector);
                    request.setAttribute(
                        IConstant.INDEX_OBJECT_VECTOR,
                        indexObjectVector);
                    request.getSession().setAttribute(
                        IConstant.FILE_NAME,
                        filePathAndName);
                    request.setAttribute(IConstant.UPLOAD_MESSAGE, "uploaded");

                } catch (Exception e1) {
                    vector.add("File name or sheet name error ");
                }

            } else {
                vector.add("File Type mismatch ");
            }

        } catch (Exception e) {

            vector.add("No excel has been selected ");
        }
        if (!errors.isEmpty()) {

            request.setAttribute(IConstant.ERROR_VECTOR, errors);
            forward = mapping.findForward("failureUpload");
        } else {
            forward = mapping.findForward("success");
        }

            return forward;



    }



}

在工作簿部分,我想从本地目录中读取excel文件。当我在调试模式下运行这段代码时,控件将进入异常块,并在我的成功页面中转发它。所以有人能帮我一下吗?我把sysout放在那部分,但是什么也没有显示。我正在使用JXl进行excel读写。我的困惑是三星级的。

EN

回答 1

Stack Overflow用户

发布于 2019-05-23 05:35:11

不是答案,而是部分重构。

这是一种可恶的行为。这是不可能通过任何代码审查的:

separate.

  • Methods操作和业务逻辑应该完全由
  • 负责。此方法: Excel Excel检查内容类型(可以说是合理的,因为它的web-related)
  • Manually解析表单(不可原谅;使用library)
  • Processes a
  • 文件(不可原谅;提取)),依次:
    • 根据BO values

的业务logic

  • Converts Excel值进行验证

行为所做的不等价工作的数量无法解释。这使得推理、调试、修复或任何事情基本上都是不可能的。下面是重构的一个非常粗糙的开始,但是你还有一两天的工作来正确地隔离功能和错误处理的级别(顺便说一句,这是错误的,因为你从来没有检查过vector,可能是历史上命名最糟糕的变量,错误,它只是被丢弃了?!)

代码语言:javascript
复制
public class IndexValueAction extends EPSBaseAction {
  public IndexValueAction() {
    super();
  }

  boolean isValidContentType(contentType) {
    return (contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)
  }

  String readContent(request) throws Exception {
    DataInputStream in = new DataInputStream(request.getInputStream());

    int             formDataLength = request.getContentLength();
    byte            dataBytes[]    = new byte[formDataLength];
    int             totalBytesRead = 0;

    while (totalBytesRead < formDataLength) {
      totalBytesRead += in.read(dataBytes, totalBytesRead, formDataLength);
    }

    return new String(dataBytes);
  }

  void scanFile(realPath, outFilePath, errors) throws Exception {
    if (!FileScanner.loadProperty(realPath)) {
      return false;
    }

    if (!FileScanner.cleanFile(outFilePath)) {
      FileScaner.cleanFile(outFilePath);
      errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("errors.dynamic", "<li>Virus found!!"));
      return;
    }

    if (!FileScanner.checkFileSign(outFilePath)) {
      FileScaner.cleanFile(filepath);
      errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("errors.dynamic", "<li>File type not supported!!"));
    }
  }

  IndexValueReportObject loadIndexValueReportObject(String[] fields, int i, Vector<String> vector) {
    IndexValueReportObject indexValueReportObj = new IndexValueReportObject();

    try {
      indexValueReportObj.setDate(Timestamp.valueOf(fields[0]));
    } catch (Exception e) {
      vector.add("Invalid Date at row " + (i + 2));
    }

    try {
      indexValueReportObj.setPlatts(new BigDecimal(fields[1]));
    } catch (Exception e) {
      vector.add("Invalid Platts Value at row " + (i + 2));
    }

    try {
      indexValueReportObj.setArgus(new BigDecimal(fields[2]));
    } catch (Exception e) {
      vector.add("Invalid Argus Value at row " + (i + 2));
    }

    try {
      indexValueReportObj.setTsi(new BigDecimal(fields[3]));
    } catch (Exception e) {
      vector.add("Invalid TSI value at row " + (i + 2));
    }

    return indexValueReportObj;
  }

  @Override
  @SuppressWarnings("unchecked")
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    Vector<String> vector = new Vector<String>();

    if (!isValidContentType(request.getContentType())) {
      vector.add("File Type mismatch");
      return mapping.findForward("failureUpload");
    }

    String file;
    try {
      file = readContent(request);
    } catch (Exception e) {
      vector.add("No excel has been selected");
      return mapping.findForward("failureUpload");
    }

    ActionErrors errors = new ActionErrors();
    try {
      String saveFile = file.substring(file.indexOf("filename=\"") + 10);
             saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
             saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,  saveFile.indexOf("\""));

      int    lastIndex = contentType.lastIndexOf("=");
      String boundary  = contentType.substring(lastIndex + 1, contentType.length());

      int pos = file.indexOf("filename=\"");
          pos = file.indexOf("\n", pos) + 1;
          pos = file.indexOf("\n", pos) + 1;
          pos = file.indexOf("\n", pos) + 1;

      int boundaryLocation = file.indexOf(boundary, pos) - 4;
      int startPos         = ((file.substring(0, pos)).getBytes()).length;
      int endPos           = file.substring(0, boundaryLocation).getBytes().length;

      Vector<IndexValueReportObject> indexObjectVector = new Vector<IndexValueReportObject>();

      SimpleDateFormat df         = new SimpleDateFormat("dd-MM-yy hh-mm-ss");
      String           fileSuffix = "-" + df.format(new Date()) + ".xls";
                        saveFile   = saveFile.substring(0, saveFile.indexOf(".")) + fileSuffix;

      ServletContext sc1        = request.getSession().getServletContext();
      Properties     properties = new Properties();
      String         realPath1  = sc1.getRealPath("serverPath.properties");

      FileInputStream fis = new FileInputStream(realPath1);
      properties.load(fis);
      String uploadFilePath = properties.getProperty("fileUpload.path");
      FileOutputStream fileOut =    new FileOutputStream(uploadFilePath + saveFile);
      System.out.println(uploadFilePath);
      if (endPos > dataBytes.length) {
        endPos = dataBytes.length;
      }

      fileOut.write(dataBytes, startPos, (endPos - startPos));
      fileOut.flush();
      fileOut.close();

      Vector<String []> rowVector = new Vector<String[]>();
      Vector<Object> errorVector  = new Vector<Object>();
      UploadObject   uploadObject = new UploadObject();
      int            errorId      = 0;

      try {
        ServletContext sc          = getServlet().getServletContext();
        String         realPath    = sc.getRealPath("virusCheck.properties");
        File           outFile     = new File(uploadFilePath  + saveFile);
        String         outFilePath = outFile.getAbsolutePath();

        scanFile(realPath, outFilePath, errors);
        if (errors.isEmpty()) {
          FileInputStream inputStream = new FileInputStream(uploadFilePath + saveFile);
          Workbook        w           = Workbook.getWorkbook(inputStream);
          Sheet           read_sheet  = w.getSheet(0);***
          int             rows        = read_sheet.getRows();

          for (int j = 1; j < rows; j++) {
            String[] fields = new String[4];
            for(int i = 0; i < fields.length; i++) {
              Cell cell = read_sheet.getCell(i, j);
              fields[i] = cell.getContents().trim();
              if (fields[0] != null) {
                try {
                  if (fields[i].indexOf(".") > 0) {
                    if (i != 1) {
                      fields[i] = fields[i];
                    } else {
                      fields[i].substring(0, fields[i].indexOf("."));
                    }
                  }
                } catch(Exception e1) {
                  int k = i+1;
                  errorVector.add("Invalid data at field " + k);
                  errorId = 1;
                }
              }
            }

            if (!(fields[0] == null || (fields[0].trim().equals("")))) {
              rowVector.add(fields);
            } else {
              break;
            }
          }

          uploadObject.setErrorId(errorId);
          uploadObject.setErrorVector(errorVector);
          uploadObject.setRowVector(rowVector);

          if (errorId == 0) {
            if (rowVector.size() > 0) {
              for (int i = 0; i < rowVector.size(); i++) {
                String[] fields = rowVector.elementAt(i);
                indexObjectVector.add(loadIndexValueReportObject(loadIndexValueReportObject(fields, i, vector)));
              }
            } else {
              vector.add("No Bidder is created in the excel file ");
            }
          } else {
            for (int k = 0; k < errorVector.size(); k++) {
              String errorDescription = (String) errorVector.get(k);
              vector.add(errorDescription);
            }
          }
        }
      } catch (Exception e1) {
        errorId     = uploadObject.getErrorId();
        rowVector   = uploadObject.getRowVector();
        errorVector = uploadObject.getErrorVector();

        for (int k = 0; k < errorVector.size(); k++) {
          String errorDescription = (String) errorVector.get(k);
          vector.add(errorDescription);
        }
      }

      request.setAttribute(IConstant.UPLOAD_MESSAGE, "uploaded");
      request.setAttribute(IConstant.INDEX_OBJECT_VECTOR, indexObjectVector);
      request.getSession().setAttribute(IConstant.FILE_NAME, uploadFilePath + saveFile);
    } catch (Exception e1) {
      vector.add("File name or sheet name error ");
    }

    if (!errors.isEmpty()) {
      request.setAttribute(IConstant.ERROR_VECTOR, errors);
      return mapping.findForward("failureUpload");
    }

    return mapping.findForward("success");
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56254216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档