java - Excel 文件保存在 Eclipse jee 文件夹中,而不是项目文件夹中
问题描述
早上好,
我正在尝试下载一个 Excel 文件,该文件在我的主要方法中将 excel 文件保存在项目的根文件夹中,但是当我通过带有 HTTPServlet 的 webapp 尝试它时,它会保存在 C:\User\MyUser\eclipse\jee -2020-03\日食\
我正在尝试将我的 excel 文件保存在我的根文件夹(excel_files)的子文件夹中而不是根文件夹中,以便我可以一次清理整个文件夹而不会删除太多重要文件。
我究竟做错了什么?以及如何将文件保存在根目录的子文件夹中?
ExcelController.java
package houseoftyping.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.nio.file.Paths;
import java.time.LocalDate;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import houseoftyping.domain.Course;
import houseoftyping.domain.User;
import houseoftyping.sql.SQLConnection;
/**
* Servlet implementation class FormController
*/
@MultipartConfig
public class ExcelController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ExcelController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (request.getParameter("type").equals("upload")) {
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
handleUpload(request, response);
} else if (request.getParameter("type").equals("downloadLatestExcel")) {
handleDownload(request, response, false);
} else if (request.getParameter("type").equals("downloadFullExcel")) {
handleDownload(request, response, true);
}
}
@SuppressWarnings("resource")
private void handleDownload(HttpServletRequest request, HttpServletResponse response, boolean fullDownload) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("Username")) {
SQLConnection conn = new SQLConnection();
User user = conn.findUserByName(cookie.getValue());
XSSFWorkbook workbook = new XSSFWorkbook();
LocalDate ld = LocalDate.now();
String fileName = "";
try {
if (request.getParameter("isAccountant").equals("true")) {
if (fullDownload) {
workbook = conn.fillWorkbookWithAllRegistrationsAccountant(workbook, user);
fileName = "export-inschrijvingen-" + ld.getDayOfMonth() + "-"
+ findFullMonthByInt(ld.getMonthValue()) + "-" + ld.getYear() + "-administratie";
} else {
workbook = conn.fillWorkbookWithLastRegistrationsAccountant(workbook, user);
fileName = "export-laatste-inschrijvingen-" + ld.getDayOfMonth() + "-"
+ findFullMonthByInt(ld.getMonthValue()) + "-" + ld.getYear() + "-administratie";
}
} else {
if (fullDownload) {
workbook = conn.fillWorkbookWithAllRegistrations(workbook, user);
fileName = "export-inschrijvingen-" + ld.getDayOfMonth() + "-"
+ findFullMonthByInt(ld.getMonthValue()) + "-" + ld.getYear();
} else {
workbook = conn.fillWorkbookWithLastRegistrations(workbook, user);
fileName = "export-laatste-inschrijvingen-" + ld.getDayOfMonth() + "-"
+ findFullMonthByInt(ld.getMonthValue()) + "-" + ld.getYear();
}
}
ServletOutputStream os = response.getOutputStream();
File file = new File(fileName + ".xlsx");
FileOutputStream fileOut = new FileOutputStream(file);
workbook.write(fileOut);
System.out.println(file.getAbsolutePath());
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
fileOut.close();
workbook.close();
os.flush();
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static String findFullMonthByInt(int monthValue) {
switch (monthValue) {
case 1:
return "januari";
case 2:
return "februari";
case 3:
return "maart";
case 4:
return "april";
case 5:
return "mei";
case 6:
return "juni";
case 7:
return "juli";
case 8:
return "augustus";
case 9:
return "september";
case 10:
return "oktober";
case 11:
return "november";
case 12:
return "december";
}
return null;
}
private void handleUpload(HttpServletRequest request, HttpServletResponse response) {
Part filePart = null;
try {
filePart = request.getPart("file");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ServletException e1) {
e1.printStackTrace();
}
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix.
try {
InputStream fileContent = filePart.getInputStream();
Workbook workbook = WorkbookFactory.create(fileContent);
createCoursesByWorkbook(workbook);
} catch (Exception E) {
E.printStackTrace();
}
}
public void createCoursesByWorkbook(Workbook workbook) {
Sheet sheet = null;
for (Sheet s : workbook) {
if (s.getSheetName().equals("import scholen")) {
sheet = s;
}
}
for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {
if (j != 0) {
Row row = sheet.getRow(j);
int i = 0;
Course c = new Course(row.getCell(i++).getStringCellValue().replaceAll("\\s", ""),
row.getCell(i++).getStringCellValue(), row.getCell(i++).getStringCellValue(),
String.valueOf(row.getCell(i++).getNumericCellValue()) + "0",
String.valueOf(row.getCell(i++).getNumericCellValue()) + "0");
c.saveCourse();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
这是填充我的工作簿的方法之一(效果很好)
XSSFSheet sheet = workbook.createSheet("Inschrijven-site");
int rowCount = 0;
Row headerRow = sheet.createRow(rowCount++);
int columnCount = 0;
String allCellHeaderNames = "Cursuscode,Geslacht,Geboortedatum,Voornaam,Tussenvoegsel,Achternaam,Naam Ouders,Adres,Stad,Adres nummer,Postcode,E-mailadres,Telefoonnummer,IBAN,Ter name van,Betalingsoptie,Mandaatdatum,Mollie Afgerond(0=nee 1=ja),Factuursturen Afgerond(0=nee 1=ja)";
String[] cellHeaderNames = allCellHeaderNames.split(",");
for (int i = 0; i < 19; i++) {
Cell cell = headerRow.createCell(columnCount++);
cell.setCellValue(cellHeaderNames[i]);
}
SQLConnection sqlConnection = new SQLConnection();
Connection conn = sqlConnection.getConnection();
String query = "SELECT * FROM registration";
try {
Statement stmn = conn.createStatement();
// execute the query, and get a java resultset
ResultSet rs = stmn.executeQuery(query);
while (rs.next()) {
columnCount = 0;
Row row = sheet.createRow(rowCount++);
for (int i = 2; i < 21; i++) {
Cell cell = row.createCell(columnCount++);
cell.setCellValue(rs.getString(i));
}
if(rs.isLast()) {
user.updateLastExport(Integer.parseInt(rs.getString(1)));
}
}
} catch (Exception e) {
e.printStackTrace();
}
return workbook;
解决方案
推荐阅读
- wordpress - NGINX 404 用于 wordpress 上的子文件夹
- mysql - MySql 和实体框架核心 - MySqlException:“字段列表”中的未知列“s.CompanyId”
- swift - 获取“使用未解析的标识符” - 找不到 .json 文件?
- r - R中两个日期之间的总和/计数
- docker - ACME certbot:尽管没有打开连接,但试运行成功
- momentjs - 如何使用 moment.js daterangepicker 允许任何日期范围?
- json - 如何从角度的json文本中提取类名及其属性?
- python - 将包含大量数据的多个 parquet 文件输入 TensorFlow Estimator
- sql - Hive - 在连接表上使用横向视图 explode(split())
- python - 如何使用 zeep 生成 SOAP 请求