Excel文件保存在Eclipse jee文件夹中,而不是项目文件夹中。

huangapple 未分类评论47阅读模式
英文:

Excel file is saved in Eclipse jee folder, not in project folder

问题

早上好,

我正在尝试下载一个 Excel 文件,在我的主方法中将该 Excel 文件保存在项目根文件夹中,但是当我通过 Web 应用程序使用 HTTPServlet 尝试下载时,它被保存在 C:\User\MyUser\eclipse\jee-2020-03\eclipse\ 中。

我想将我的 Excel 文件保存在根文件夹的子文件夹中(excel_files),以便我可以一次性清理整个文件夹,而不会删除太多重要文件。

我做错了什么?我如何将文件保存在根目录的子文件夹中?

ExcelController.java

// 在这里是您的 Java 代码,用于处理 Excel 相关的逻辑
// 请注意,这部分代码被省略,只提供翻译的说明部分

这是填充工作簿的一个方法(完全正常运行):

XSSFSheet sheet = workbook.createSheet("Inschrijven-site");
// ... 此处省略了一些代码
return workbook;

如果您需要关于特定代码部分的更多帮助,请随时提问。

英文:

Goodmorning,

I am trying to download a Excel file that in my main method saves the excel file in my root folder of my project, but when I try it via the webapp with a HTTPServlet it gets saved in C:\User\MyUser\eclipse\jee-2020-03\eclipse\

I am trying to save my excel files not in a root folder but in a subfolder from my root folder (excel_files) so that I can clean the entire folder at once without removing too much important.

What am I doing wrong? And how can i save my files in the subfolder of my root?

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);
	}

}

This is one of the methods that fills my workbook (which works perfectly fine)

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;

huangapple
  • 本文由 发表于 2020年6月29日 16:47:47
  • 转载请务必保留本文链接:https://java.coder-hub.com/62634412.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定