需求.提供公共的可以按照一定条件查询出结果,并提供将查询结果全部下载功能(Excel、CSV、TXT),由于一次性查出结果放到内存会占用大量内存.需要支持分页模式查询出所有数据。

实现思路

  1.在公共的controller(BaseController)中增加下载方法

  2.支持自定义分页查询方式、自定义表头和查询结果属性对应

  

@ResponseBody
@RequestMapping("/exportExcel.json")
public void exportExcel(HttpServletRequest request, HttpServletResponse response, final DeductCurrentsQry qry) throws Exception { // 从零行开始导出
qry.setStart(0);
// 分页设置大一点,提高导出效率
qry.setLimit(50);
//开始导出数据
DownloadDataLoader<DeductCurrentVo> loader = new DownloadDataLoader<DeductCurrentVo>() {
@Override
protected List<DeductCurrentVo> getDownloadData(Integer pageNum) {
// pageNum 初始值为0,在下载工具类中,通过对pageNum的自加,达到分页查询效果
qry.setStart(pageNum * qry.getLimit());
PageDataList<DeductCurrentVo> pageBean = getPageDataList(qry);
return pageBean.getRows();
}
};
String[] hearders = new String[] {"客户ID", "抵用券编号", "抵用券类型", "起投限制", "抵用券面值", "投资金额", "产品代码", "抵用券状态", "抵用券兑换码", "发放时间", "使用时间" };
String[] fields = new String[] { "customerId", "id", "deductType", "minInvestAmount", "faceValueFormat", "investAmount", "productCode", "deductStatus", "deductSn", "createDatetimeFormat", "usedDatetimeFormat" }; this.download(response,String.format("抵用券记录_%S.xls", DateUtil.dateStr(new Date())),
Arrays.asList(hearders), null, loader, Arrays.asList(fields));
}
package com.wjs.common.web;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.httpclient.util.DateUtil;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder; import com.wjs.common.util.StringEscapeEditor;
import com.wjs.common.util.excel.ExcelUtils; /**
* 基础控制器
*
* 其他控制器继承此控制器获得日期字段类型转换和防止XSS攻击的功能
*
* @author Moon
*
*/
@Controller
public class BaseController { private static final Logger LOGGER = LoggerFactory.getLogger(BaseController.class); @InitBinder
public void initBinder(ServletRequestDataBinder binder) { /**
* 自动转换日期类型的字段格式
*/
// binder.registerCustomEditor(Date.class, new CustomDateEditor(
// new SimpleDateFormat("yyyy-MM-dd"), true)); /**
* 防止XSS攻击
*/
binder.registerCustomEditor(String.class, new StringEscapeEditor(true, false));
} /**
* http请求成功时调用
*
* @return
*
* @author chenchunhui
*/
protected <T> JsonResult<T> success() { return this.success("操作成功", null);
} /**
* http请求成功时调用
*
* @param data
* 返回给前台的数据
* @return 返回给前台的标准json对象
*/
protected <T> JsonResult<T> success(T data) { return this.success("操作成功", data);
} /**
* http请求成功时调用
*
* @param msg
* 信息说明
* @param data
* 返回给前端的数据
* @param <T>
* @return 返回给前台的标准json对象
*
* @author chenchunhui
*/
protected <T> JsonResult<T> success(String msg, T data) { JsonResult<T> result = new JsonResult<T>(JsonResult.Status.SUCCESS, msg, data);
if (LOGGER.isDebugEnabled()) {
String logString = result.toString();
if (logString.length() > 1024) {
logString = logString.substring(0, 1024);
}
LOGGER.debug(logString);
}
return result;
} /**
* http请求失败时调用
*
* @return 返回给前台的标准json对象
*
* @author chenchunhui
*/
protected <T> JsonResult<T> error() { return this.error("系统错误");
} /**
* http请求失败时调用
*
* @param msg
* 信息说明
* @return 返回给前台的标准json对象
*
* @author chenchunhui
*/
protected <T> JsonResult<T> error(String msg) { JsonResult<T> result = new JsonResult<T>(JsonResult.Status.ERROR, msg);
if (LOGGER.isInfoEnabled()) {
String logString = result.toString();
if (logString.length() > 1024) {
logString = logString.substring(0, 1024);
}
LOGGER.info(logString);
}
return result;
} /**
* 分页下载数据获取类
* @author Silver
* @date 2017年3月16日 上午11:45:13
*
* @param <T>
*
*/
protected abstract class DownloadDataLoader<T> { /**
* 分页下载属性值控制操作类
* @param bean
* @param propertyName
* @param property
* @return
* @author Silver
* @date 2017年3月16日 上午11:45:45
*/
protected String convertProperty(T bean, String propertyName, Object property) {
return property == null ? "" : property.toString();
} /**
* 分页下载属性赋值
* @param bean
* @param propertyName
* @return
* @author Silver
* @date 2017年3月16日 上午11:46:37
*/
protected Object getProperty(T bean, String propertyName) {
try {
return BeanUtils.getProperty(bean, propertyName);
} catch (Throwable e) {
LOGGER.info("bean:" + bean + ",Property:" + propertyName + e.getMessage(), e);
return null;
}
} /**
* 数据获取接口
* @param pageNum -- 从0计数
* @return
* @throws Exception
* @author Silver
* @date 2017年3月16日 上午11:47:07
*/
protected abstract List<T> getDownloadData(Integer pageNum) throws Exception;
}; protected static interface Writer {
public void write(Collection<String> row) throws IOException;
} /**
* Web下载文件
* @param response httpResponse信息
* @param fileName 文件名称,如果文件名称为空的情况默认【 日期.csv】格式
* @param header 表头名称
* @param columnWidth 列宽
* @param loader 数据加载类
* @param queryParam 如果有查询条件的传递
* @param propertyNames
* @throws Exception
* @author Silver
* @date 2017年3月16日 上午11:47:31
*/
protected <T> void download(HttpServletResponse response, String fileName, List<String> header, List<Integer> columnWidth, DownloadDataLoader<T> loader, List<String> propertyNames) throws Exception { if (StringUtils.isEmpty(fileName) || loader == null || CollectionUtils.isEmpty(propertyNames)) {
throw new RuntimeException("参数错误。FileName:" + fileName + ",DataLoader:" + loader + ",PropertyName:" + propertyNames);
}
// 获取输出流,设置content-type等头域
final OutputStream out = getResponseStream(response ,fileName);
try {
Writer writer = null;
// 获取文件后缀名
String extension = FilenameUtils.getExtension(fileName);
// 如果是excel的后缀
if ("xls".equalsIgnoreCase(extension) || "xlsx".equalsIgnoreCase(extension)) {
Workbook workbook = new HSSFWorkbook();
Sheet sheet = workbook.createSheet("sheet1");
final List<Collection<String>> rows = new ArrayList<Collection<String>>();
writer = new Writer() {
@Override
public void write(Collection<String> row) {
rows.add(row);
}
}; writeOutputStream(loader, propertyNames, writer);
// 写入excel
if (!ExcelUtils.setExcelInfo(sheet, columnWidth, header, rows)) {
throw new IOException("设置导出文件内容失败。");
} workbook.write(out);
} else if("csv".equalsIgnoreCase(extension)) {
writer = new Writer() { @Override
public void write(Collection<String> row) throws IOException { String str = ExcelUtils.collectionToCsvString(row);
byte[] content = org.apache.commons.codec.binary.StringUtils.getBytesUnchecked(str + "\n",
"GBK");
IOUtils.write(content, out);
out.flush();
}
};
// 写文件头
writer.write(header);
// 写文件
writeOutputStream(loader, propertyNames, writer);
}else{
writer = new Writer() { @Override
public void write(Collection<String> row) throws IOException { IOUtils.write(org.apache.commons.codec.binary.StringUtils.getBytesUnchecked(row + "\n",
"GBK"), out);
out.flush();
}
};
// 写文件头
writer.write(header);
// 写文件
writeOutputStream(loader, propertyNames, writer);
}
out.flush();
} finally {
IOUtils.closeQuietly(out);
}
} /**
* 获得输出流
*
* @return
* @throws IOException
*/
protected OutputStream getResponseStream(HttpServletResponse response, String fileName) throws IOException {
if (StringUtils.isEmpty(fileName)) {
fileName = DateUtil.formatDate(new Date(), "yyyy-MM-dd_HH-mm-ss") + ".csv";
}
response.reset(); String extension = FilenameUtils.getExtension(fileName);
if("xlsx".equalsIgnoreCase(extension)){
// 部分window版本生成后的xlsx打不开,默认改成xls打开
fileName = fileName.substring(0, fileName.length() -1);
}
//设置响应编码
response.setCharacterEncoding("UTF-8");
//设置对应的contentType
response.setContentType("application/x-download;charset=UTF-8");
// response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(fileName.getBytes("gb2312"), "ISO-8859-1"));
OutputStream out = response.getOutputStream(); return out;
} protected <T> void writeOutputStream(DownloadDataLoader<T> loader, List<String> propertyNames,
Writer writer) throws Exception { int pageNum = 0;
int maxLenth = 102400;
while (maxLenth-- > 0) {
// 分页获取数据
List<T> objList = null;
try {
objList = loader.getDownloadData(pageNum++);
} catch (Exception e) {
LOGGER.error("获得到处数据异常:{}",e.getMessage(), e);
}
if (CollectionUtils.isEmpty(objList)) {
break;
}
for (T bean : objList) {
if (bean == null) {
continue;
}
Collection<String> result = new ArrayList<String>();
// 遍历指定属性
for (String name : propertyNames) {
// 获得属性值
Object property = loader.getProperty(bean, name);
// 将属性值转换成字符串
String convertValue = loader.convertProperty(bean, name, property);
// 组装成row
result.add(convertValue);
}
if (CollectionUtils.isEmpty(result)) {
continue;
}
writer.write(result);
}
} }
}

BaseController代码

package com.wjs.common.util.excel;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanMap;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.util.CollectionUtils; /**
*
* @author liqiang05
*
*/
public class ExcelUtils { /**
* logger
*/
private static final Logger logger = Logger.getLogger(ExcelUtils.class); /**
* 设置列格式
*
* @param sheet
* @param columnWidthList
*/
public static boolean setSheetStyle(Sheet sheet, List<Integer> columnWidthList) {
if (sheet == null || columnWidthList == null) {
return false;
}
// 设置所有列的宽度
for (int indx = 0, iMax = columnWidthList.size(); indx < iMax; indx++) {
Integer columnWidth = columnWidthList.get(indx);
if (columnWidth == null) {
continue;
}
sheet.setColumnWidth(indx, columnWidth.intValue() * 256);
}
return true;
} /**
* 设置行信息
*
* @param row
* @param rowObj
* @return
*/
public static boolean setRowInfo(Row row, Collection<Object> rowObj) {
if (row == null || rowObj == null) {
if (logger.isInfoEnabled()) {
logger.info("Row:" + row + ",rowObj" + rowObj);
}
return false;
}
// 填充每一列数据
int indxColumn = 0;
for (Object object : rowObj) {
Cell cell = row.createCell(indxColumn++);
if (object == null) {
if (logger.isDebugEnabled()) {
logger.debug("Row:" + row + ",Column:" + indxColumn + ",is empty");
}
continue;
}
String columnValue = object.toString();
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(columnValue);
}
return true;
} /**
* 设置行信息
*
* @param row
* @param rowObj
* @param convert
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static boolean setRowInfo(Row row, Object rowObj, IExcelConvert convert) {
if (row == null || rowObj == null) {
if (logger.isInfoEnabled()) {
logger.info("Row:" + row + ",rowObj" + rowObj);
}
return false;
}
try {
Collection<Object> rowContent = null;
if (convert != null) {
rowContent = convert.convert(rowObj);
} else if (rowObj instanceof Map) {
rowContent = ((Map) rowObj).values();
} else if (rowObj instanceof Collection) {
rowContent = (Collection) rowObj;
} else {
rowContent = (new BeanMap(rowObj)).values();
}
if (rowContent == null || rowContent.isEmpty()) {
if (logger.isDebugEnabled()) {
logger.debug("Row:" + row + ",is empty");
}
return false;
}
return setRowInfo(row, rowContent);
} catch (Throwable e) {
logger.info(rowObj + "convertFailed,row:" + row, e);
return false;
} } /**
* 将数据写入excel
*
* @param sheet
* @param columnWidth
* @param header
* @param content
* @return
*/
public static boolean setExcelInfo(Sheet sheet, List<Integer> columnWidth, List<String> header, List<?> rows) {
return setExcelInfo(sheet, columnWidth, header, rows, null);
} /**
* 将数据写入excel
*
* @param sheet
* @param columnWidth
* @param header
* @param content
* @param converter
* @return
*/
public static boolean setExcelInfo(Sheet sheet, List<Integer> columnWidth, List<String> header, List<?> content, IExcelConvert converter) {
if (sheet == null) {
logger.info("sheet is null");
return false;
}
// 设置sheet格式
setSheetStyle(sheet, columnWidth); // 设置头信息
int indxRow = 0;
Row row = sheet.createRow(indxRow++);
setRowInfo(row, header, null); // 如果内容为空 则退出
if (content == null || content.isEmpty()) {
logger.info("content is null,cannot write excel");
return true;
}
for (Object rowContent : content) {
row = sheet.createRow(indxRow++);
setRowInfo(row, rowContent, converter);
}
return true;
} /**
* 導出到excel
*
* @param title
* sheet Title
* @param columnWidthList
* 所有列的寬度,可以不指定
* @param content
* 內容, 每一項為一行,每一行內是List代表所有列
* @return
*/
public static Workbook setupXls(String title, List<Integer> columnWidthList, List<List<String>> content) { Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet(title);
if (columnWidthList != null) {
// 设置所有列的宽度
for (int indx = 0, iMax = columnWidthList.size(); indx < iMax; indx++) {
Integer columnWidth = columnWidthList.get(indx);
if (columnWidth == null) {
continue;
}
sheet.setColumnWidth(indx, columnWidth.intValue() * 256);
}
} if (content == null || content.isEmpty()) {
if (logger.isInfoEnabled()) {
logger.info("content is null,cannot write excel,title:" + title);
}
return wb;
} // 遍歷一行
for (int indxRow = 0, iMaxRow = content.size(); indxRow < iMaxRow; indxRow++) {
Row row = sheet.createRow(indxRow);
List<String> rowContent = content.get(indxRow);
if (rowContent == null || rowContent.isEmpty()) {
if (logger.isDebugEnabled()) {
logger.debug("Row:" + indxRow + ",is empty,title:" + title);
}
continue;
}
// 填充每一列数据
for (int indxColumn = 0, iMaxColumn = rowContent.size(); indxColumn < iMaxColumn; indxColumn++) {
Cell cell = row.createCell(indxColumn);
String columnValue = rowContent.get(indxColumn);
if (columnValue == null || columnValue.length() == 0) {
if (logger.isDebugEnabled()) {
logger.debug("Row:" + indxRow + ",Column:" + indxColumn + ",is empty,title:" + title);
}
continue;
}
cell.setCellValue(columnValue);
}
}
return wb;
} /**
* 加載Excel 默認實現方式
*
* @param wb
* @return
*/
public static List<List<String>> loadXls(Workbook wb) {
// 默認 只讀第一個sheet, 且從第二行開始遍歷,默认读取到最大列
return loadXls(wb, 0, 1, 0);
} /**
* 加载excel
*
* @param wb
* @param sheetIndx
* 要加载excel的sheet页的index
* @param startRowIndx
* 要加载Row的index
* @param iMaxColumn
* 最大读到Cloumn的index
* @return List<List<>>
*/
public static List<List<String>> loadXls(Workbook wb, int sheetIndx, int startRowIndx, int iMaxColumn) {
List<List<String>> resList = new ArrayList<List<String>>();
if (wb == null || sheetIndx < 0 || startRowIndx < 0 || iMaxColumn < 0) {
logger.error("param error,return empty list,Workbook:" + wb + ",sheetIndex:" + sheetIndx + ",startRowNo:" + startRowIndx + ",iMaxColumn:" + iMaxColumn);
return resList;
}
Sheet sheet = wb.getSheetAt(sheetIndx);
if (sheet == null) {
logger.error("sheet is null,return empty list,Workbook:" + wb + ",sheetIndex:" + sheetIndx + ",startRowNo:" + startRowIndx);
return resList;
} // 從指定行開始遍歷
for (int indxRow = startRowIndx, iMaxRow = sheet.getLastRowNum(); indxRow <= iMaxRow; indxRow++) {
Row row = sheet.getRow(indxRow);
if (row == null) {
if (logger.isDebugEnabled()) {
logger.debug("Row is null,sheetIndex:" + sheetIndx + ",RowNo:" + indxRow);
}
continue;
}
List<String> rowContent = new ArrayList<String>();
// 當最大列為0時 讀取最大CellNum
if (iMaxColumn == 0) {
iMaxColumn = row.getLastCellNum();
}
boolean hasContent = false;
for (int indxColumn = 0; indxColumn < iMaxColumn; indxColumn++) {
String cellValue = null;
Cell cell = row.getCell(indxColumn);
if (cell == null) {
if (logger.isDebugEnabled()) {
logger.debug("Cell is null,sheetIndex:" + sheetIndx + ",RowNo:" + indxRow + ",CellNo:" + indxColumn);
}
} else {
cellValue = getCellStrValue(cell);
}
// 如果 读到的内容不是空 代表这行有数据
if (cellValue != null && cellValue.length() > 0) {
hasContent = true;
}
// 不论当前格是否有数据都加入.
rowContent.add(cellValue);
}
// 这一行有内容 则加入
if (hasContent) {
resList.add(rowContent);
}
}
return resList;
} public static String getCellStrValue(Cell cell) {
String res = "";
try {
res = cell.getStringCellValue();
} catch (Exception e) {
DecimalFormat df = new DecimalFormat("#");
res = df.format(cell.getNumericCellValue()) + "";
}
return res;
} /**
*
* @Description: 将集合转换成字符串输出
* @param coll
* @return 设定文件
* @throws 异常说明
* @author albert.su suzy@malam.com
* @date 2014年5月7日 下午12:35:55
*/
public static String collectionToCsvString(Collection<?> coll) {
if (CollectionUtils.isEmpty(coll)) {
return "";
}
StringBuilder sb = new StringBuilder();
Iterator<?> it = coll.iterator();
while (it.hasNext()) {
Object object = it.next();
if (String.valueOf(object).matches("[0-9,\\.]+") || String.valueOf(object).contains(",")) {
sb.append("\"\t");
sb.append(object);
sb.append("\"");
} else {
sb.append("\t");
sb.append(object);
}
if (it.hasNext()) {
sb.append(",");
}
}
return sb.toString();
} // 以下为糯米的代码, 建议少用 /**
* 从InputStream读取Excel workbook
*
* @param ins
* @return
* @throws IOException
* @throws FileNotFoundException
*/
public static HSSFWorkbook readWorkbook(InputStream ins) throws IOException, FileNotFoundException {
ByteArrayOutputStream byteOS = new ByteArrayOutputStream();
BufferedInputStream bis = new BufferedInputStream(ins);
byte[] by = new byte[512];
int t = bis.read(by, 0, by.length);
while (t > 0) {
byteOS.write(by, 0, 512); // read 512
t = bis.read(by, 0, by.length);
}
byteOS.close();
InputStream byteIS = new ByteArrayInputStream(byteOS.toByteArray());
HSSFWorkbook wbDest = new HSSFWorkbook(byteIS);
return wbDest;
} public static void writeToResponse(HttpServletResponse response, HSSFWorkbook wb, String fileName) throws IOException {
response.setContentType("application/ms-download");
response.setCharacterEncoding("gb2312");
response.setHeader("Content-Disposition", "filename=" + fileName);
OutputStream out = response.getOutputStream();
wb.write(out);
out.flush();
out.close();
} /**
* 判断单元格的格式
*
* @param cell
* 单元格
* @return String 将excel各种单元格的类型转换为String类型
*/
public static String getCellStringValue(HSSFCell cell) {
// 转换后单元格的值
String value = "";
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getRichStringCellValue().getString();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
value = sdf.format(date);
} else {
DecimalFormat formatter = new DecimalFormat("########");
value = formatter.format(cell.getNumericCellValue());
}
break; case HSSFCell.CELL_TYPE_FORMULA:
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
value = String.valueOf(cell.getNumericCellValue());
break; case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
}
return value;
} /**
* 到出excel的Helper类
*
* @author Administrator
*
*/
public static class ExcelRowBuilder { private HSSFRow row; private short index = 0; public ExcelRowBuilder(HSSFRow row) {
this.row = row;
} @SuppressWarnings("deprecation")
public ExcelRowBuilder addCell(String str) {
HSSFCell cell = row.createCell(index++);
cell.setCellValue(new HSSFRichTextString(str));
return this;
} @SuppressWarnings("deprecation")
public ExcelRowBuilder addCell(long value) {
HSSFCell cell = row.createCell(index++);
cell.setCellValue(value);
return this;
} @SuppressWarnings("deprecation")
public ExcelRowBuilder addCell(double value) {
HSSFCell cell = row.createCell(index++);
cell.setCellValue(value);
return this;
}
}
}

ExcelUtil代码

Java分页下载的更多相关文章

  1. Listview实现分页下载

    分析: * 1.初始控件,展示第一页数据 * 2.设置触发条件 * 1.设置滚动监听 * 2.判断是否在底部 * 3.判断是否停止滚动 * 4.更改网络请求参数为下一页 * 5.异步网络请求 * 6. ...

  2. JAVA多线程下载网络文件

    JAVA多线程下载网络文件,开启多个线程,同时下载网络文件.   源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...

  3. java多线程下载和断点续传

    java多线程下载和断点续传,示例代码只实现了多线程,断点只做了介绍.但是实际测试结果不是很理想,不知道是哪里出了问题.所以贴上来请高手修正. [Java]代码 import java.io.File ...

  4. The Java™ Tutorials下载地址

    1.The Java™ Tutorials下载地址: http://www.oracle.com/technetwork/java/javase/java-tutorial-downloads-200 ...

  5. 数据你把它的金额-JAVA分页

    数据量你造吗-JAVA分页 原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),须要转载的,保留下! Thanks 学习的心态第一,解行要对应. 事实 ...

  6. 浅谈Java分页技术

    话不多言.我们要实现java分页技术,我们首先就需要定义四个变量,他们是: int  pageSize;//每页显示多少条记录 int pageNow;//希望现实第几页 int pageCount; ...

  7. JAVA的下载与安装和环境变量配置等详细教程

    初学JAVA时,新手常常不知如何下载JAVA,也不知如何安装JAVA以及对JAVA配置环境变量.近期学弟学妹常请教我如何下载安装和配置JAVA,于是写下此博文以便更多新手快速入门,由于我本人是玩智能车 ...

  8. Windows 7下java SDK下载、安装及环境变量设置

    第一步:下载Java JDK   1 登录官网站下载正版JDK   2 点击"SDK Download"进入Java JDK下载页面 注明: Java JDK和Java JRE区别 ...

  9. 一个方便的java分页算法

    一个好用的java分页算法,代码如下,只需要分页参数继承Pageable类就可以很方便分页了 package cn.com.base.common.pagination; /** * 分页基类 * * ...

随机推荐

  1. Sleep 比对 (Win32API 与 STL )

    OutputDebugStringA("begin 1========"); for (int i = 0; i < 1800; i++) { Sleep(2); } Out ...

  2. 希尔排序(java)

    希尔排序是对直接插入排序的一种优化,基本思想是把待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序:小组的个数逐次缩小:当完成了所有数据元素都在一个组内的排序后排序过程结束.希尔排 ...

  3. sass安装方法,绝对好用的方式

    系统重做了,很多东西都重装,sass也一样,结果在安装的过程中遇到了问题,这里记录下,也给同样遇到问题的朋友们一个思路.本方法是参照http://www.w3cplus.com/sassguide/i ...

  4. CF-839B

    B. Game of the Rows time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. 条款32:确定你的public继承塑模出is-a的关系

    Make sure public inheritance models "is –a " 如果令clsss D 以public的形式继承class B,你便是告诉编译器说,每一个类 ...

  6. 3.7-3.9 HBase表属性

    一.表压缩 1.HBase Sanppy HBase Sanppy 1)配置Haodop压缩 [beifeng@hadoop-senior hadoop-2.5.0]$ bin/hadoop chec ...

  7. bzoj 4788: [CERC2016]Bipartite Blanket【hall定理+状压】

    考虑当前合法的一个点集s,如果他合法,那么一定有一个完备匹配的点集包含这个点集,也就是两边都满足hall定理的话这两边拼起来的点集也满足要求 所以分别状压两边点集用hall定理转移判断当前点集是否合法 ...

  8. 洛谷P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower

    P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower 题目描述 “逢低吸纳”是炒股的一条成功秘诀.如果你想成为一个成功的投资者,就要遵守这条秘诀: "逢低吸纳,越低越 ...

  9. 求10000以内n的阶乘(openjudge 2923)

    求10000以内n的阶乘 总时间限制:  5000ms 内存限制:  655360kB 描述 求10000以内n的阶乘. 输入 只有一行输入,整数n(0<=n<=10000). 输出 一行 ...

  10. eclipse中设置vm后缀文件以html高亮形式显示

    第一步,打开Windows-preference-General-ContentTypes-Text-HTML 第二步,点击Add添加 "*.vm",Default-encodin ...