JSP上传文件 我们可以通过Apache的fileupload组件来实现jsp上传文件,这样就不需要自己去写具体的实现了,首先需要配置如下依赖: lt;dependencygt; lt;groupIdgt;commons-fileuploadlt;/groupIdgt; lt;art
JSP上传文件
我们可以通过Apache的fileupload组件来实现jsp上传文件,这样就不需要自己去写具体的实现了,首先需要配置如下依赖:
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>
写一个简单的jsp页面,通过表单来提交需要上传的文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <!-- enctype是表单提交的数据类型 --> <form action="upload" method="post" enctype="multipart/form-data"> <!-- multiple属性可以上传多个文件 --> <input type="file" name="fileUpload" multiple="multiple"/> <button type="submit" name="subimit">上传</button> </form> </body> </html>
然后编写一个servlet,用来将上传的文件都保存到指定的路径中:
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FileUtils; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.List; @WebServlet("/upload") public class UpLoadServlet extends HttpServlet { protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { // 指定一个临时路径 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); diskFileItemFactory.setRepository(new File("D:/")); // 实例化上传文件对象,并把临时目录对象传递给它 ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory); // 设置编码 servletFileUpload.setHeaderEncoding("UTF-8"); // 设置单个文件的最大大小 servletFileUpload.setFileSizeMax(1024 * 1024 * 5); // 设置全部文件的最大大小 servletFileUpload.setSizeMax(1024 * 1024 * 50); // 文件上传后的保存路径 File saverDir = new File(this.getServletContext().getRealPath("/uploadDir")); System.out.println(saverDir.getPath()); try { // 把包含在请求中的文件数据对象拿出来放到集合里 List<FileItem> fileItemList = servletFileUpload.parseRequest(httpServletRequest); // 遍历集合里的文件对象 for (FileItem fileItem : fileItemList) { // 判断是否是表单字段,是的话就打印出来 if (fileItem.isFormField()) { System.out.println(fileItem.getString()); } // 非表单字段就是文件对象 if (!fileItem.isFormField()) { // 将文件对象中的数据写入到之前定义的保存目录中 FileUtils.copyInputStreamToFile(fileItem.getInputStream(), new File(saverDir, fileItem.getName())); } } } catch (FileUploadException e) { e.printStackTrace(); } // 上传完之后再跳回原来的页面中 httpServletResponse.sendRedirect("upload.jsp"); } }
接着在工程中创建uploadDir目录:
我上传了两个文件:
上传之后在你的工程路径下找target目录下的uploadDir目录(如果你使用的是IDEA),看看有没有上传成功,我这里是上传成功了:
<br>
导出Excel表
Apache有个poi组件,可以帮助我们把一些数据导出为Excel表格式的文件,例如可以将mysql的一些表格数据导出成Excel表格式的文件。首先需要配置如下依赖:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
写一个简单的导出数据的类:
import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.File; import java.io.IOException; public class OutputExcel { public static void main(String[] args) throws IOException { //创建工作薄对象 HSSFWorkbook workbook = new HSSFWorkbook(); //创建工作表对象 HSSFSheet sheet = workbook.createSheet("学生信息"); // 创建首行 HSSFRow cells=sheet.createRow(0); cells.createCell(0).setCellValue("编号"); cells.createCell(1).setCellValue("名字"); cells.createCell(2).setCellValue("性别"); cells.createCell(3).setCellValue("地址"); cells.createCell(4).setCellValue("电话号码"); // 循环给工作表填充数据 for (int i = 1; i < 100; i++) { // 创建行 cells = sheet.createRow(i); // 创建单元格,然后设置单元格的数据 cells.createCell(0).setCellValue(i); cells.createCell(1).setCellValue("小明"); cells.createCell(2).setCellValue("男"); cells.createCell(3).setCellValue("湖南"); cells.createCell(4).setCellValue("15669855326"); } // 将生成的Excel格式的数据保存到指定的路径中 workbook.write(new File("E:\\test.xls")); } }
然后打开文件,文件的内容如下:
如图证明导出成功。
也可以事先准备好一个带有样式的Excel文件,然后把数据导入该Excel文件中,例如我有一个Excel文件,文件样式如下:
编写代码如下:
import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class OutputExcel { public static void main(String[] args) throws IOException { //创建工作薄对象 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("e:\\note.xls")); //得到模板文件的工作表对象 HSSFSheet sheet = workbook.getSheet("Sheet1"); // 循环给工作表填充数据 for (int i = 1; i < 100; i++) { // 创建行 HSSFRow cells = sheet.createRow(i); // 创建单元格,然后设置单元格的数据 cells.createCell(0).setCellValue(i); cells.createCell(1).setCellValue("小明"); cells.createCell(2).setCellValue("男"); cells.createCell(3).setCellValue("湖南"); cells.createCell(4).setCellValue("15669855326"); } // 将生成的Excel格式的数据保存到指定的路径中 workbook.write(new File("e:\\note.xls")); } }
完成后,文件内容如下:
还可以导入到别的Excel文件中,只需要把保存路径改一下就可以了。
<br>
把数据库中的表格数据导出为Excel表: 数据库表格内容如下:
1.写一个数据库连接对象管理类:
import java.sql.Connection; import java.sql.DriverManager; public class DBManager { public static Connection getConnection() throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection connection=DriverManager.getConnection("jdbc:mysql:///jdbc","root","password"); return connection; } }
2.编写一个类,将数据库表格的数据转换成Excel表格式:
import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.File; import java.sql.*; public class OutputDataToXls { public static void main(String[] args) throws Exception { //创建工作薄对象 HSSFWorkbook workbook = new HSSFWorkbook(); //创建工作表对象 HSSFSheet hssfSheet = workbook.createSheet("学生信息"); //得到数据库连接对象并执行查询语句 Connection connection = DBManager.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement("select * from student"); ResultSet resultSet = preparedStatement.executeQuery(); //拿到表结构对象 ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); //得到总列数 int columnCount = resultSetMetaData.getColumnCount(); //创建首行 HSSFRow cells = cells = hssfSheet.createRow(0); //创建首行的单元格并将列名填充进去 for (int i = 1; i <= columnCount; i++) { cells.createCell(i - 1).setCellValue(resultSetMetaData.getColumnName(i)); } //将查询出来的数据填充到每一行的单元格中 for (int i = 1; resultSet.next(); i++) { cells = hssfSheet.createRow(i); for (int j = 1; j <= columnCount; j++) { cells.createCell(j - 1).setCellValue(resultSet.getObject(resultSetMetaData.getColumnName(j)).toString()); } } // 将生成的Excel格式的数据保存到指定的路径中 workbook.write(new File("e:\\student.xls")); } }
3.完成后,打开生成的文件,效果如下:
如果需要样式什么的,可以使用之前介绍的方法,先准备一个空的模板文件,然后再写入数据。