0

.xlsファイルを取得してそれを読み取り、出力をプレーンテキストとして提供する.xlsリーダーを開発していますが、ファイルパスをサーブレットに取り込む際に問題が発生しています...poi.jarを使用して読み取ります.xlsファイル..

.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Upload Form</title>

    </head>


    <body bgcolor="lightblue">
 <table id='table1' align="center" >
                <tr>

                </tr></table><br/><br/><br/>  
            <br/>

            <table border="1" width="50%" bgcolor="#C2DFFF">
                <tr>
                    <td width="100%">
                        <form action="writeExcel" method="post" enctype="multipart/form-data">

                            <h2 align="center">Welcome</h2>
  <center>

      <input type="file" name="photo"/>
                                <input type="file" name="hem"/>
                                <br/><br/>
                                <input type="submit" value="Save"/>
                                &nbsp;
                                <input type="button" value="Logout" name="logout" onclick="goToURL();" />
                                <br/>
                                <br/>

                            </center>     
                        </form>
                    </td>
                </tr>
</table>

            <br/><br/>


    </body>
</html>

.java

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Vector;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class writeExcel extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String fileName = request.getParameter("hem");



       Vector dataHolder = ReadCSV(fileName);
        printCellDataToConsole(dataHolder);
    }

   public static Vector ReadCSV(String fileName) {
        Vector cellVectorHolder = new Vector();

        try {
            FileInputStream myInput = new FileInputStream(fileName);

            POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);

            HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);

            HSSFSheet mySheet = myWorkBook.getSheetAt(0);

            Iterator rowIter = mySheet.rowIterator();

            while (rowIter.hasNext()) {
                HSSFRow myRow = (HSSFRow) rowIter.next();
                Iterator cellIter = myRow.cellIterator();
                Vector cellStoreVector = new Vector();
                while (cellIter.hasNext()) {
                    HSSFCell myCell = (HSSFCell) cellIter.next();
                    cellStoreVector.addElement(myCell);
                }
                cellVectorHolder.addElement(cellStoreVector);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cellVectorHolder;
    }

    private static void printCellDataToConsole(Vector dataHolder) {

        for (int i = 0; i < dataHolder.size(); i++) {
            Vector cellStoreVector = (Vector) dataHolder.elementAt(i);
            for (int j = 0; j < cellStoreVector.size(); j++) {
                HSSFCell myCell = (HSSFCell) cellStoreVector.elementAt(j);
                String stringCellValue = myCell.toString();
                System.out.print(stringCellValue + "\t");
            }
            System.out.println();
        }
    }
}
4

1 に答える 1

0

@AVD : fileName はファイル/ドキュメントの絶対パスを表していますか? そうでない場合は、実際の (絶対) パスを設定/取得します。

@Nitin Sharma: AVD に感謝します.. finename="C:\a.xls" を使用しているときは正常に動作していますが、.jsp からファイルを介してパスを取得しようとしています。

@AVD : アップロードされたファイルを Web アプリのルート (またはサブフォルダー) に保存するか、fileName の代わりにアップロードされたファイルの InputStream (Servlet 3.0 Part または Apache fileupload api) オブジェクトを使用する必要があります。

@Nitin Sharma:ファイルをアップロードしたくない...そのファイルのフルパスを取得したい..

@AVD : 何も言うことはありません! 選択の余地はありません。(アップロードされたファイルを保存しないで、アップロードされたファイルのストリームを使用してください)。

@Nitin Sharma:私はそれを使用しましたが、poiはFileクラスオブジェクトを使用してファイルを読み取ります..しかし、Apache fileupload apiはFileItemクラスオブジェクトを使用して.xlsファイルのパスを読み取りまたは取得します...そして、FileItemを型キャストできませんファイル


POIFSFileSystemクラスを見てください。これはInputStreamパラメーターを取り、 FileItem.getInputStream()(Commons アップロード) を介して取得できます。

POIFSFileSystem myFileSystem = new POIFSFileSystem(fileItem.getInputStream());
于 2012-06-26T07:34:01.323 に答える