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.完成后,打开生成的文件,效果如下:
如果需要样式什么的,可以使用之前介绍的方法,先准备一个空的模板文件,然后再写入数据。