Excel download durch apache poi

Möchte ich die excel-Datei herunterladen, wenn der Benutzer ruft diese Methode. Datei ist der Download erfolgreich, aber das ist zu schaffen mit einer anderen excel-Datei in die classPath-Projekt. Kann bitte jemand mir helfen, dies zu vermeiden classPath-Datei erstellen.
Vielen Dank im Voraus.

@Override
    public void downloadExcel(HttpServletRequest request,HttpServletResponse response) throws IOException { 

              File file = new File("Segmentdetail.xlsx"); 

              XSSFWorkbook workbook = new XSSFWorkbook(); 
              XSSFSheet spreadsheet = workbook.createSheet("SegmentLogs Info");
              spreadsheet.setDefaultColumnWidth(20);
             .....Here is the logic for generating sheet which is quite big so iam skipping it.

             }           
             FileOutputStream out = new FileOutputStream(file);
             workbook.write(out);
             downloadFile(file,response);
             out.close();
             workbook.close();

    }

    private void downloadFile(File file, HttpServletResponse response){

        try {         
            response.setContentType("application/vnd.ms-excel");
            response.addHeader("content-disposition", "attachment; filename=Segmentdetail.xlsx");
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "no-store");
            response.addHeader("Cache-Control", "max-age=0");
            FileInputStream fin = null;
            try {
                fin = new FileInputStream(file);
            } catch (final FileNotFoundException e) {
                e.printStackTrace();
            }
            final int size = 1024;
            try {
                response.setContentLength(fin.available());
                final byte[] buffer = new byte[size];
                ServletOutputStream outputStream = null;

                outputStream = response.getOutputStream();
                int length = 0;
                while ((length = fin.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, length);
                }
                fin.close();
                outputStream.flush();
                outputStream.close();
            } catch (final IOException e) {
                e.printStackTrace();
            }
        }catch (final Exception ex){
            ex.printStackTrace();
    }

}
InformationsquelleAutor lakshmi | 2017-07-21



2 Replies
  1. 1

    Verwenden Sie einen absoluten Pfad für die Datei, wo Sie schreiben Ihre excel:

    File file = new File(      "C:\\Segmentdetail.xlsx"); //windows
    File file = new File("/home/usr/Segmentdetail.xlsx"); //unix    

    Angemessener Ergänzung ist, um eine variable zu verwenden:

    File file = new File(System.getenv("user.home"), "Segmentdetail.xlsx");

    Natürlich können Sie definieren eine benutzerdefinierte variable, und verwenden Sie es, zu.

    • Ich will nicht die Datei zu erstellen, die in meiner lokalen Maschine.Es sollte in der Sitzung und laden Sie von dort.
  2. 0

    Da erstellen Sie die Datei mit nachstehenden Befehl

    File file = new File("Segmentdetail.xlsx"); 

    Generiere die Datei im Klassenpfad

    besser zu geben, den Pfad oder die Datei und gleichen Pfad beim herunterladen

    File file = new File("c://Segmentdetail.xlsx"); 
    • sorry, ich habe versucht, mit der oben ein, aber am Ende mit Datei nicht gefunden Ausnahme. Übrigens bin ich mit Ubuntu.
    • geben Sie als Pfad unterhalb von /home/usr/Dateiname, und geben Sie denselben Pfad, während Ihr herunterladen als filename =
    • Nein, es ist nicht dieselbe Ausnahme. Es ist trotzdem halten Sie die excel-Tabelle in der Sitzung und laden Sie von dort ?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.