java生成和下载xls文件问题

我的这个问题主要是实时生成xls文件然后下载到客户端,但目前由于数据过多,所以需要的
反映时间挺长,这样就会出现504 Gateway Time-out The server didn't respond in time.
这个问题。请问大神,我该如何解决这个问题?

5个回答

这是由于客户端请求服务器时间过长,服务器没有给出相应引起的,具体你查一下设置web服务器客户端超时时间就可以解决了

yu954663801
yu954663801 这是浏览器访问超时,总不能要求所有用户都更改设置。如果是非浏览器发出的HttpCilent倒是可以改超时时间。
3 年多之前 回复

可以设值一下服务器session的有效期

方案:
1、将文件生成在本地,设置xls生成状态为false,若完成则改为true;
2、用ajax轮询定时查看状态是否为true,若为true,刷新URL从服务器本地下载。

这是浏览器超时时间的问题,不能要求用户全部更改设置的。

建议方案:可以使用定时器按一定周期生成文件(如果要求数据非常及时那就周期短点,)
下载的时候速度就非常快了,可以直接把生成好的文件返回

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java 生成 xls文件放置服务器目录, 在linux环境下文件名中文乱码
生成的xls文件名中文乱码,文件内容可以正常显示。 文件名使用 String 转 UTF-8 格式。 URLcode 转UTF-8 都是不好使的。 linux环境支持中文。 求助,这个应该怎么处理。
在java web工程中·,利用ireport生成的jasper文件,导出pdf文件
我已经用ireport工具生成了jasper文件,并且利用ireport已经可以成功预览并生成pdf文件,但是现在需要在java web工程中,利用jasper文件生成相应的pdf文件,自己测视了好久,在网上也搜了好久,没有找到解决办法,现在把相应代码及错误贴出来,希望会做的朋友帮忙改正一下! 主要的servlet文件,在web.xml中都已将其配置好了 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.sql.Connection; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import util.JDBCConnection; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.JasperRunManager; import net.sf.jasperreports.engine.export.JRHtmlExporter; import net.sf.jasperreports.engine.export.JRHtmlExporterParameter; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; import net.sf.jasperreports.engine.util.JRLoader; public class JRHTMLServlet extends HttpServlet { private Connection conn = JDBCConnection.getConnection(); //这个是连接mysql数据库 public JRHTMLServlet() { super(); } public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String type = request.getParameter("type"); try { ServletContext servletContext = this.getServletContext(); File reportFile = new File(servletContext.getRealPath("/")+"/WEB-INF/report/Untitled_report_1.jasper"); Map parameters = new HashMap(); if("pdf".equals(type)){ byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn); response.setContentType("application/pdf"); response.addHeader("Content-Disposition", "attachment; filename=report.pdf"); response.setContentLength(bytes.length); ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(bytes, 0, bytes.length); ouputStream.flush(); ouputStream.close(); } else if ("excel".equals(type)){ JRXlsExporter exporter = new JRXlsExporter(); ByteArrayOutputStream oStream = new ByteArrayOutputStream(); JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, conn); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream); exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); exporter.exportReport(); byte[] bytes = oStream.toByteArray(); response.setContentType("application/vnd.ms-excel"); response.addHeader("Content-Disposition", "attachment; filename=report.xls"); response.setContentLength(bytes.length); ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(bytes, 0, bytes.length); ouputStream.flush(); ouputStream.close(); } else { JRHtmlExporter exporter = new JRHtmlExporter(); ByteArrayOutputStream oStream = new ByteArrayOutputStream(); JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, conn); exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE); exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "utf-8"); exporter.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM, oStream); exporter.exportReport(); byte[] bytes = oStream.toByteArray(); response.setContentType("text/html"); response.setContentLength(bytes.length); response.setCharacterEncoding("utf-8"); ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(bytes, 0, bytes.length); ouputStream.flush(); ouputStream.close(); } } catch (JRException jre) { System.out.println("JRException:" + jre.getMessage()); } catch (Exception e) { System.out.println("Exception:" + e.getMessage()); } finally{ try { conn.close(); } catch (SQLException ex) { // TODO Auto-generated catch block ex.printStackTrace(); } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } } 在jsp文件中的主要代码: <a href="JRHTMLServlet?type=pdf">Servlet中生成pdf</a> <a href="JRHTMLServlet?type=excel">Servlet中生成excel</a> <a href="JRHTMLServlet?type=html">Servlet中生成html</a> 然后编译都没有问题,在执行时,如果点击了“Servlet中生成pdf”超链接,就会提示错误: JRException:Error evaluating expression : Source text : new java.lang.Integer(1) 若点击“Servlet中生成excel”超链接,就会提示错误: 严重: Servlet.service() for servlet JRHTMLServlet threw exception java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Sheet 若点击“Servlet中生成html”超链接,就会提示错误: JRException:Error preparing statement for executing the report query : SELECT customer.`ID` AS customer_ID, customer.`USERNAME` AS customer_USERNAME, customer.`PASSWORD` AS customer_PASSWORD, customer.`REALNAME` AS customer_REALNAME, customer.`ADDRESS` AS customer_ADDRESS, customer.`MOBILE` AS customer_MOBILE, customer.`IDCARD_ID` AS customer_IDCARD_ID FROM `customer` customer 以上三种都试了,执行时,页面都可以跳转,但是跳转之后,都没有显示,直接出错了,我尝试了好久好久,确实不知道是什么问题,还请各位帮忙看看啊,在这里先谢谢你们啦 附:数据库的连接: String url = "jdbc:mysql://localhost/test"; String userName = "root"; String password = "123456"; Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, userName,password); 数据库表里面有中文,应该没有影响,现在只要求可以在web工程中导出pdf就可以了
请教一个JAVA GUI程序制作EXE的问题,谢谢大家!
大家好,我现在需要将一个JAVA GUI程序制作成EXE文件。采用的是EXE4J+inno setup .在eclipse中的工程目录大概如下: --IQ -- src -- etc -- template --a.xls --b.xls etc里面放的一个配置文件,是窗口初始化时读取的配置信息 template文件夹里面是几个模板xls文件。 打包,制作exe都比较顺利。但是安装后在安装目录下面没有template这个文件夹,当然也就找不到模板文件。程序就报错。 请教大家,如何制作安装文件,让其在安装目录下自动生成template这个文件夹。 谢谢大家了。
java怎么实现读取数据库并生成excel表下载
页面是jsp做的,后台的controller如下所示,为什么我点击前端还是实现不了下载呢? ``` @RequestMapping(value = "regionInfoDload",method = RequestMethod.GET) public void infoDownLoad(Integer regionLevel, HttpServletRequest request, HttpServletResponse response, Model model) { System.out.println("从前台获得的regionLevel: " + regionLevel); List<TljsjkAjlj15> listTest = tljsjkAjlj15Service.conditionDownload(regionLevel, null,null); System.out.println("测试下载查询的数据总量: " + listTest.size()); //1.创建excel的文档对象 HSSFWorkbook wb = new HSSFWorkbook(); //2.创建excel的表单 HSSFSheet sheet = wb.createSheet("性别"); //设置行的高度 //sheet.setColumnWidth(i, 256*18); //3.excel字体 HSSFFont font = wb.createFont(); //4.excel样式 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平居中对齐 HSSFRow row = sheet.createRow(1); HSSFCell cell = row.createCell(1); cell.setCellValue("姓名"); cell = row.createCell(2); cell.setCellValue("身高预测值"); System.out.println("======================100================"); for(int i =2;i<listTest.size() + 1;i++) { row = sheet.createRow(i); cell = row.createCell(1); cell.setCellValue(listTest.get(i - 2).getJh() == null ? "":listTest.get(i - 2).getJh()); cell = row.createCell(2); cell.setCellValue(listTest.get(i - 2).getYlmbqYc() == null ? 0: listTest.get(i - 2).getYlmbqYc()); } System.out.println("======================200================"); try { String fileName = new String("运营数据.xls".getBytes("utf-8"),"utf-8"); response.setContentType("application/octet-stream;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename="+ fileName); response.addHeader("Pargam", "no-cache"); response.addHeader("Cache-Control", "no-cache"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println("======================300================"); OutputStream os = null; try { os = response.getOutputStream(); wb.write(os); os.flush(); Thread.sleep(10000); System.out.println("======================400================"); } catch (Exception e) { e.printStackTrace(); }finally { if(os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 从前端发送请求,controller中的的代码执行到:System.out.println("======================400================");这一句,为什么还是实现不了? 大家知道我出错了在哪里吗?抑或大家有什么别的解决方案吗?望请各位路过的大咖不吝赐教。跪谢!
关于IE8导出POI生成的文件丢失文件名
response.addHeader("Content-Disposition", "attachment;filename=utf-8'zh_cn'" + fileName + ".xls"); 在IE11和其他浏览器正常,但是IE导出之后没有文件名和文件类型,文件名就是接口名称(但是手动给导出的文件添加类型之后可正常打开且内容是对的)例如: IE11、Chrome等浏览器导出文件为:我的Excel表格.xls IE8导出的文件为:exportExcel
java 将Excel07 转出03版本
如题。 最近有个需求需要将500w的数据生成XLS文件,POI没有发现支持大数据导出。于是采用07版本,但是03 Excel版本打不开,需要将07转03.求高手。 或者帮忙提供一下03生成大数据的方案,谢谢!
java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件,颜色会出错
程序代码如下: public class Main { public static void main(String[] args) { try { InputStream fis1 = new FileInputStream("D:/fei/testfiles/2G囤卡量.xls"); InputStream fis2 = new FileInputStream("D:/fei/testfiles/电子渠道.xls"); Workbook wb1 = Workbook.getWorkbook(fis1); Workbook wb2 = Workbook.getWorkbook(fis2); WritableWorkbook newWb = Workbook.createWorkbook(new File("D:/fei/testfile/jxl.xls")); newWb.importSheet("NewSheet0", 0, wb1.getSheet(0)); newWb.importSheet("NewSheet1", 1, wb2.getSheet(0)); fis1.close(); fis2.close(); wb1.close(); wb2.close(); newWb.write(); newWb.close(); } catch (BiffException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } } } 合并使用的excel源文件是用杰表报表工具生成的报表。合并之后的excel文件,数据、单元格合并、边框等都与源文件相符,但是颜色会出现异常,一些单元格会加上蓝色的背景色。 我自己也新建了几个excel文件来测试,颜色不会出现异常。我不知道是office版本的问题,还是excel文件本身有什么属性是我不知道的。 以上所有的excel文件都是97-03版的xls文件。 请赐教。
写了一个java的统计考勤 如何和给他设置一个配置文件并且可以通过配置文件修改路径呢
``` import java.io.File; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class zijixiedefangfa { public static void main(String[] args) throws BiffException, IOException, ParseException { String fileName = "D://Io//jisuan.xls"; // Excel文件所在路径 File file = new File(fileName); // 创建文件对象 Workbook wb = Workbook.getWorkbook(file); // 从文件流中获取Excel工作区对象(WorkBook) Sheet sheet = wb.getSheet(0); // 从工作区中取得页(Sheet) int n =0; Date min = null; String firm = ""; //定义公司 String name = ""; //定义姓名 String day = ""; //定义日期 String time_start = ""; //定义最早时间 String time_end = ""; //定义最晚时间 List shuju = new ArrayList(); //定义总的传入集合 List bumen = new ArrayList(); //部门 List xingming = new ArrayList(); //姓名 List date = new ArrayList(); //日期 List earlyTime = new ArrayList(); //上班时间 List endTime = new ArrayList<Date>(); //下班时间 List workTime = new ArrayList(); //上班时间 List chidao = new ArrayList(); //迟到 List zaotui = new ArrayList(); //早退 //最晚上班时间 SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); Date biaozhun = df.parse("10:00:00"); while(n<sheet.getRows()){ //这一天的最早上班时间 firm = sheet.getCell(0,shuju.size()).getContents(); name = sheet.getCell(1,shuju.size()).getContents(); day = sheet.getCell(2,shuju.size()).getContents(); time_start = sheet.getCell(3,shuju.size()).getContents(); bumen.add(sheet.getCell(0,shuju.size()).getContents()); xingming.add(sheet.getCell(1,shuju.size()).getContents()); date.add(sheet.getCell(2,shuju.size()).getContents()); earlyTime.add(sheet.getCell(3,shuju.size()).getContents()); //判断是否迟到 if(df.parse(sheet.getCell(3,shuju.size()).getContents()).getTime()>biaozhun.getTime()){ chidao.add("迟到"); }else{ chidao.add(""); } while(n<sheet.getRows()){ //如果前三条数据一样的话 说明是同一天 if(sheet.getCell(0,n).getContents().equals(firm) && sheet.getCell(1,n).getContents().equals(name) && sheet.getCell(2,n).getContents().equals(day) ){ shuju.add(sheet.getCell(3,n).getContents()); }else{ break; } n++; } //当前三条数据不一样时 退出当前while循环 数组长度减1的下标就是下班时间 endTime.add(sheet.getCell(3,shuju.size()-1).getContents()); } for (int i = 0; i < earlyTime.size(); i++) { try { workTime.add((df.parse((String) endTime.get(i)).getTime()-df.parse((String) earlyTime.get(i)).getTime())/3600000+"小时"); //判断是否早退 if((df.parse((String) endTime.get(i)).getTime()-df.parse((String) earlyTime.get(i)).getTime())/3600000>=8){ zaotui.add(""); }else{ zaotui.add("早退"); } } catch (ParseException e) { e.printStackTrace(); } } //关闭读取流 wb.close(); try { //打开写入流 WritableWorkbook book = Workbook.createWorkbook(new File("D://Io//stu.xls")); // 生成名为“sheet1”的工作表,参数0表示这是第一页 WritableSheet kaoqin = book.createSheet("kaoqin", 0); //写入部门 for (int i = 0; i < bumen.size(); i++) { Label label = new Label(0, i, (String) bumen.get(i)); // 将定义好的单元格添加到工作表中 kaoqin.addCell(label); } //写入姓名 for (int i = 0; i < xingming.size(); i++) { Label label = new Label(1, i, (String) xingming.get(i)); kaoqin.addCell(label); } //写入日期 for (int i = 0; i < date.size(); i++) { Label label = new Label(2, i, (String) date.get(i)); kaoqin.addCell(label); } //写入上班时间 for (int i = 0; i < earlyTime.size(); i++) { Label label = new Label(3, i, (String) earlyTime.get(i)); kaoqin.addCell(label); } //写入下班时间 for (int i = 0; i < endTime.size(); i++) { Label label = new Label(4, i, (String) endTime.get(i)); kaoqin.addCell(label); } //写入总共上班时间 for (int i = 0; i < workTime.size(); i++) { Label label = new Label(5, i, (String) workTime.get(i)) ; kaoqin.addCell(label); } //加入迟到 for (int i = 0; i < chidao.size(); i++) { Label label = new Label(6, i, (String) chidao.get(i)) ; kaoqin.addCell(label); } //写入早退 for (int i = 0; i < zaotui.size(); i++) { Label label = new Label(7, i, (String) zaotui.get(i)) ; kaoqin.addCell(label); } book.write(); //执行写入操作 book.close(); //关闭流 }catch (Exception e) { System.out.println(e); } } } ``` ![图片说明](https://img-ask.csdn.net/upload/201712/07/1512637294_354757.png) ![图片说明](https://img-ask.csdn.net/upload/201712/07/1512637303_72375.png) 需求是想添加一个配置文件 通过配置文件来修改java文件中的读取路径 这个该怎么做啊
如何解决springmvc用jxl下载excel文件指定文件名的问题
如下是用jxl下载excel的代码代码: @RequestMapping(value = "downexceljxl") @ResponseBody public void downexceljxl(HttpServletRequest request, HttpServletResponse response) { try { response.setContentType("application/vnd.ms-excel"); OutputStream os=response.getOutputStream(); WritableWorkbook workbook = Workbook.createWorkbook(os); WritableSheet sheet = workbook.createSheet("First Sheet",0); Label xuexiao = new Label(0,0,"学校");//列,行,值 sheet.addCell(xuexiao); Label zhuanye = new Label(1,0,"专业"); sheet.addCell(zhuanye); Label jingzhengli = new Label(2,0,"专业竞争力"); sheet.addCell(jingzhengli); Label qinghua = new Label(0,1,"清华大学"); sheet.addCell(qinghua); Label jisuanji = new Label(1,1,"计算机专业"); sheet.addCell(jisuanji); Label gao = new Label(2,1,"高"); sheet.addCell(gao); workbook.write(); workbook.close(); response.setHeader("Content-disposition", "attachment;filename="+java.net.URLEncoder.encode("excel.xls", "UTF-8")); os.close(); }catch (Exception e){ e.printStackTrace(); } } 简单的springmvc代码,用jxl下载excel, 发现谷歌浏览器左下角下载下来的文件名是 downexceljxl.do,为什么不是excel.xls,可以像poi下载excel一样指定文件名吗,望技术牛人帮忙解答一下,谢谢 如下是poi下载excel的例子可以生成指定文件名(**希望能对需要的人带来帮助**), @RequestMapping(value = "downexcelpoi") @ResponseBody public void downexcelpoi(HttpServletRequest request, HttpServletResponse response) { try { //response.reset();//重置输出流 response.setContentType("application/vnd.ms-excel"); final String sheetname = "sheet"; HSSFWorkbook workbook = new HSSFWorkbook(); HSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); HSSFFont font = workbook.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); style.setFont(font); HSSFSheet sheet; sheet = workbook.createSheet(sheetname); HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell(0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(new HSSFRichTextString("姓名")); cell = row.createCell(1); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(new HSSFRichTextString("年龄")); for (int i=1;i<10;i++){ row = sheet.createRow(i); cell = row.createCell(0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(new HSSFRichTextString("姓名"+i)); cell = row.createCell(1); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(new HSSFRichTextString("年龄"+i)); } ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { workbook.write(bos); } catch (IOException e) { // TODO Auto-generated catch block throw new Exception("导出失败"); } byte[] ba = bos.toByteArray(); bos.close(); ByteArrayInputStream bis = new ByteArrayInputStream(ba); HSSFWorkbook xwb = (HSSFWorkbook) WorkbookFactory.create(bis); OutputStream out=response.getOutputStream(); xwb.write(bos); response.setHeader("Content-disposition", "attachment;filename="+java.net.URLEncoder.encode("excel.xls", "UTF-8")); }catch (Exception e){ e.printStackTrace(); } }
JAVA怎么做点击按钮促发事件弹出浏览窗口选择excel文件读取,并显示到另外一个界面上,请给出主要代码
JAVA怎么做点击按钮促发事件弹出浏览窗口选择excel文件读取,并显示到另外一个界面上?package com.excel; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.swing.JTextArea; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * 解析Excel的类 */ public class ExcelOperate { private JTextArea area; private String fileName; /** * 构造方法传值 * * @param area * 显示Excel内容的位置 * @param fileName * Excel文件名 */ public ExcelOperate(JTextArea area, String fileName) { this.area = area; this.fileName = fileName; } /** * 解析Excel文件 */ public void parseExcel() { File file = new File(fileName); String[][] result = null; try { result = getData(file, 1); } catch (IOException e) { e.printStackTrace(); } int rowLength = result.length; for (int i = 0; i < rowLength; i++) { for (int j = 0; j < result[i].length; j++) { area.append(result[i][j] + "\t\t"); } area.append("\n"); } } /** * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 * * @param file * 读取数据的源Excel * @param ignoreRows * 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1 * @return 读出的Excel中数据的内容 * @throws FileNotFoundException * @throws IOException */ public static String[][] getData(File file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); int rowSize = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream( file)); // 打开HSSFWorkbook POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFCell cell = null; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { HSSFSheet st = wb.getSheetAt(sheetIndex); // 第一行为标题,不取 for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { HSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (cell != null) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (date != null) { value = new SimpleDateFormat("yyyy-MM-dd") .format(date); } else { value = ""; } } else { value = new DecimalFormat("0").format(cell .getNumericCellValue()); } break; case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值 if (!cell.getStringCellValue().equals("")) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 去掉字符串右边的空格 * * @param str * 要处理的字符串 * @return 处理后的字符串 */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (str.charAt(i) != 0x20) { break; } length--; } return str.substring(0, length); } } ------------------------------------------------------------------------------------------ package com.excel; import java.awt.BorderLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.filechooser.FileNameExtensionFilter; /** * 主界面,按钮响应事件,文本域输出Excel内容 */ public class OpenExcel extends JFrame implements ActionListener { private JButton button; private JScrollPane pane; private JTextArea area; public OpenExcel() { super("解析Excel"); button = new JButton("点我选择Excel文件"); button.addActionListener(this); area = new JTextArea(); pane = new JScrollPane(area); this.add(button, BorderLayout.NORTH); this.add(pane); this.setSize(300, 300); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } // 按钮事件 public void actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser();// 文件选择对话框 chooser.setAcceptAllFileFilterUsed(false);// 取消所有文件过滤项 chooser.setFileFilter(new FileNameExtensionFilter("Excel文件", "xls"));// 设置只过滤扩展名为.xls的Excel文件 int i = chooser.showOpenDialog(this);// 打开窗口 if (i == JFileChooser.APPROVE_OPTION) { this.setLocation(0, 0); this.setSize(Toolkit.getDefaultToolkit().getScreenSize()); new ExcelOperate(area, chooser.getSelectedFile().getAbsolutePath()) .parseExcel(); } } public static void main(String[] args) throws Exception { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); new OpenExcel(); } }我的代码是这样的,但是界面显示不出来,是什么问题?![图片](https://img-ask.csdn.net/upload/201706/09/1496974828_84401.jpg)
小白求助:poi生成excel速度过慢问题,该怎么优化
package poiMain; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Scanner; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class PoiGH3215 { private static String fileName=""; public static String getCell(int x,int y) throws IOException{ DecimalFormat df = new DecimalFormat("#"); InputStream myxls=new FileInputStream(fileName); @SuppressWarnings("resource") XSSFWorkbook wb =new XSSFWorkbook(myxls); XSSFSheet sheet=wb.getSheetAt(0);//第一个工作表 XSSFRow row =sheet.getRow(x-1);//第x行 XSSFCell cell =row.getCell((short)y-1);//第x行第y个元素 if(cell==null){ return null; } String cellValue = ""; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: cellValue = cell.getRichStringCellValue().getString().trim(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式 SimpleDateFormat sdf = null; if (cell.getCellStyle().getDataFormat() == HSSFDataFormat .getBuiltinFormat("h:mm")) { sdf = new SimpleDateFormat("HH:mm"); } else {// 日期 sdf = new SimpleDateFormat("yyyy/MM/dd"); } Date date = cell.getDateCellValue(); cellValue = sdf.format(date); } else { cellValue = df.format(cell.getNumericCellValue()).toString(); } break; default: cellValue = ""; } return cellValue; } public static void ModelGH3215() throws IOException{ @SuppressWarnings("resource") XSSFWorkbook wb =new XSSFWorkbook(); Date d = new Date(); DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String fileName = df.format(d); FileOutputStream fileOut = new FileOutputStream("D:/输出/工行3215/" + fileName + "_main" + ".xls"); XSSFSheet sheet=wb.createSheet(); Font font = wb.createFont(); XSSFCellStyle style = wb.createCellStyle(); //新建单元格样式 font.setFontName("宋体"); font.setFontHeightInPoints((short) 12);//设置字体大小 font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//粗体显示 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直 style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框 style.setFont(font); //设置单元格列宽 sheet.setColumnWidth(0, 100 * 100); sheet.setColumnWidth(1, 100 * 30); sheet.setColumnWidth(3, 100 * 30); sheet.setColumnWidth(4, 100 * 30); sheet.setColumnWidth(9, 100 * 130); sheet.setColumnWidth(20, 100 * 40); XSSFRow row =sheet.createRow((short)0); XSSFCell cell=row.createCell((short)0); row.setHeight((short) 700);//设置行高 cell.setCellValue("银行科目"); row.getCell((short)0).setCellStyle(style); row.createCell((short)1).setCellValue("币别"); row.getCell((short)1).setCellStyle(style); row.createCell((short)2).setCellValue("序列号"); row.getCell((short)2).setCellStyle(style); row.createCell((short)3).setCellValue("日期"); row.getCell((short)3).setCellStyle(style); row.createCell((short)4).setCellValue("业务日期"); row.getCell((short)4).setCellStyle(style); row.createCell((short)5).setCellValue("凭证字"); row.getCell((short)5).setCellStyle(style); row.createCell((short)6).setCellValue("凭证号"); row.getCell((short)6).setCellStyle(style); row.createCell((short)7).setCellValue("凭证年"); row.getCell((short)7).setCellStyle(style); row.createCell((short)8).setCellValue("凭证期间"); row.getCell((short)8).setCellStyle(style); row.createCell((short)9).setCellValue("摘要"); row.getCell((short)9).setCellStyle(style); row.createCell((short)10).setCellValue("对方科目"); row.getCell((short)10).setCellStyle(style); row.createCell((short)11).setCellValue("结算方式"); row.getCell((short)11).setCellStyle(style); row.createCell((short)12).setCellValue("结算号"); row.getCell((short)12).setCellStyle(style); row.createCell((short)13).setCellValue(""); row.getCell((short)13).setCellStyle(style); row.createCell((short)14).setCellValue(""); row.getCell((short)14).setCellStyle(style); row.createCell((short)15).setCellValue("汇率"); row.getCell((short)15).setCellStyle(style); row.createCell((short)16).setCellValue("附件数"); row.getCell((short)16).setCellStyle(style); row.createCell((short)17).setCellValue("汇率类型"); row.getCell((short)17).setCellStyle(style); row.createCell((short)18).setCellValue("备注"); row.getCell((short)18).setCellStyle(style); row.createCell((short)19).setCellValue("对应外币"); row.getCell((short)19).setCellStyle(style); row.createCell((short)20).setCellValue("对应外币金额"); row.getCell((short)20).setCellStyle(style); int j = 1;int sum=0;int a=0;int s=getNum(); ArrayList<String> date1 = new ArrayList(); ArrayList<Integer> value1 = new ArrayList(); ArrayList<String> date2 = new ArrayList(); ArrayList<Integer> value2 = new ArrayList(); for(int i=5;i<s+2;i++){ if(PoiGH3215.getCell(i,4).equals("转款")&&(PoiGH3215.getCell(i,8).equals("31001547840050012398"))){ System.out.println("get"); XSSFRow row2 =sheet.createRow((short)j++); row2.createCell((short)14).setCellValue(getCell(i,5)); row2.createCell((short)13).setCellValue(getCell(i,7)); row2.createCell((short)3).setCellValue(getCell(i,2));//日期 row2.createCell((short)4).setCellValue(getCell(i,2));//日期 row2.createCell((short)0).setCellValue("1021.01.10|工行广州白云路支行(8980)-备汇缴");//第一列 row2.createCell((short)9).setCellValue("收转款,建行怒江2398转入工行侨香");//摘要 }else if(PoiGH3215.getCell(i,4).equals("收付")&&(!PoiGH3215.getCell(i,5).equals(PoiGH3215.getCell(i,6)))){ XSSFRow row3 =sheet.createRow((short)j); row3.createCell((short)9).setCellValue("付移动手机充值款"); row3.createCell((short)13).setCellValue(getCell(i,7));//添加值 row3.createCell((short)14).setCellValue(getCell(i,5));//添加值 row3.createCell((short)3).setCellValue(getCell(j,2)); row3.createCell((short)4).setCellValue(getCell(j,2)); row3.createCell((short)0).setCellValue("1021.01.10|工行广州白云路支行(8980)-备汇缴"); row3.createCell((short)14).setCellValue(getCell(i,5)); row3.createCell((short)9).setCellValue("收还款退款");//摘要 } else if(PoiGH3215.getCell(i,4).equals("收付")&&(PoiGH3215.getCell(i,5).equals(PoiGH3215.getCell(i,6)))){ XSSFRow row3 =sheet.createRow((short)j); row3.createCell((short)9).setCellValue("付移动手机充值款"); row3.createCell((short)13).setCellValue(getCell(i,7)); row3.createCell((short)14).setCellValue(getCell(i,5));//添加值 row3.createCell((short)3).setCellValue(getCell(j,2)); row3.createCell((short)4).setCellValue(getCell(j,2)); row3.createCell((short)0).setCellValue("1021.01.10|工行广州白云路支行(8980)-备汇缴"); row3.createCell((short)14).setCellValue(getCell(i,5)); row3.createCell((short)9).setCellValue("收收付");//摘要 } else if(PoiGH3215.getCell(i,4).equals("拉卡拉代付款")&&(!PoiGH3215.getCell(i,9).equals("拉卡拉支付有限公司客户备付金"))&&(!PoiGH3215.getCell(i,9).equals("拉卡拉支付有限公司(客户备付金)"))&&(!PoiGH3215.getCell(i,9).equals("拉卡拉网络技术有限公司北京分公司的数(合计数)"))){ //System.out.println(i); date1.add(PoiGH3215.getCell(i,2)); value1.add(Integer.parseInt(PoiGH3215.getCell(i,5))); } } for(int c=0;c<date1.size();c++){ try { if(date1.get(c).equals(date1.get(c+1))){ a=value1.get(c); sum=a+sum; }else { a= value1.get(c); sum=a+sum; date2.add(date1.get(c)); value2.add(sum); sum=0; } } catch (Exception e) { a=value1.get(c); sum=a+sum; date2.add(date1.get(c)); value2.add(sum); } } for(int k=0;k<date2.size();k++){ XSSFRow row3 =sheet.createRow((short)j+k); row3.createCell((short)14).setCellValue(value2.get(k)); row3.createCell((short)9).setCellValue("付代付款"); row3.createCell((short)3).setCellValue(date2.get(k)); row3.createCell((short)4).setCellValue(date2.get(k)); row3.createCell((short)0).setCellValue("1021.01.10|工行广州白云路支行(8980)-备汇缴"); } for(int m=1;m<j+date2.size();m++){ XSSFRow row2 =sheet.getRow((short)m); row2.createCell((short)1).setCellValue("RMB|人民币"); row2.createCell((short)15).setCellValue("1"); row2.createCell((short)16).setCellValue("0"); row2.createCell((short)17).setCellValue("01|公司汇率"); row2.createCell((short)20).setCellValue("0"); } wb.write(fileOut); fileOut.close(); System.out.println("输入完毕"); } public static int getNum() throws IOException{ synchronized (fileName) { while("".equals(fileName)){ System.out.println("请输入您的文件路径:"); Scanner sc = new Scanner(System.in); fileName = sc.nextLine(); sc.close(); } } InputStream myxls=new FileInputStream(fileName); @SuppressWarnings("resource") XSSFWorkbook wb =new XSSFWorkbook(myxls); XSSFSheet sheet=wb.getSheetAt(0);//第一个工作表 return sheet.getLastRowNum(); } } 我要处理的表有6万多行,我这个处理一个200行的都要1分钟
java如何进去选择框选择一个excel并将里面的数据显示到一个界面上
package com.excel; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.swing.JTextArea; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * 解析Excel的类 */ public class ExcelOperate { private JTextArea area; private String fileName; /** * 构造方法传值 * * @param area * 显示Excel内容的位置 * @param fileName * Excel文件名 */ public ExcelOperate(JTextArea area, String fileName) { this.area = area; this.fileName = fileName; } /** * 解析Excel文件 */ public void parseExcel() { File file = new File(fileName); String[][] result = null; try { result = getData(file, 1); } catch (IOException e) { e.printStackTrace(); } int rowLength = result.length; for (int i = 0; i < rowLength; i++) { for (int j = 0; j < result[i].length; j++) { area.append(result[i][j] + "\t\t"); } area.append("\n"); } } /** * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 * * @param file * 读取数据的源Excel * @param ignoreRows * 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1 * @return 读出的Excel中数据的内容 * @throws FileNotFoundException * @throws IOException */ public static String[][] getData(File file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); int rowSize = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream( file)); // 打开HSSFWorkbook POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFCell cell = null; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { HSSFSheet st = wb.getSheetAt(sheetIndex); // 第一行为标题,不取 for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { HSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (cell != null) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (date != null) { value = new SimpleDateFormat("yyyy-MM-dd") .format(date); } else { value = ""; } } else { value = new DecimalFormat("0").format(cell .getNumericCellValue()); } break; case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值 if (!cell.getStringCellValue().equals("")) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 去掉字符串右边的空格 * * @param str * 要处理的字符串 * @return 处理后的字符串 */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (str.charAt(i) != 0x20) { break; } length--; } return str.substring(0, length); } } ------------------------------------------------------------------------------------------ package com.excel; import java.awt.BorderLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.filechooser.FileNameExtensionFilter; /** * 主界面,按钮响应事件,文本域输出Excel内容 */ public class OpenExcel extends JFrame implements ActionListener { private JButton button; private JScrollPane pane; private JTextArea area; public OpenExcel() { super("解析Excel"); button = new JButton("点我选择Excel文件"); button.addActionListener(this); area = new JTextArea(); pane = new JScrollPane(area); this.add(button, BorderLayout.NORTH); this.add(pane); this.setSize(300, 300); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } // 按钮事件 public void actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser();// 文件选择对话框 chooser.setAcceptAllFileFilterUsed(false);// 取消所有文件过滤项 chooser.setFileFilter(new FileNameExtensionFilter("Excel文件", "xls"));// 设置只过滤扩展名为.xls的Excel文件 int i = chooser.showOpenDialog(this);// 打开窗口 if (i == JFileChooser.APPROVE_OPTION) { this.setLocation(0, 0); this.setSize(Toolkit.getDefaultToolkit().getScreenSize()); new ExcelOperate(area, chooser.getSelectedFile().getAbsolutePath()) .parseExcel(); } } public static void main(String[] args) throws Exception { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); new OpenExcel(); } }为什么实现不了?可以选择但是无法显示在界面上![图片](https://img-ask.csdn.net/upload/201706/08/1496885462_114736.jpg)
jxl读取excel的一个搞脑子的问题
前几天被叫去看一个老系统,做好大概几个月了。 <br /> <br />说是excel导入出了问题,有一批数据就是不能导入。而且也是excel格式的,看不出问题。 <br /> <br />然后我过去本机跑了一下,报的不是业务异常,是jxl读文件的异常,如下: <br /> <br /><pre name="code" class="java">jxl.read.biff.BiffException: Unable to recognize OLE stream at jxl.read.biff.CompoundFile.&lt;init&gt;(CompoundFile.java:116) at jxl.read.biff.File.&lt;init&gt;(File.java:127) at jxl.Workbook.getWorkbook(Workbook.java:221) at jxl.Workbook.getWorkbook(Workbook.java:198) </pre> <br /> <br />然后去查了下jxl的源代码,这里抛出的异常。 <br /><pre name="code" class="java">for (int i = 0; i &lt; IDENTIFIER.length; i++) { if (data[i] != IDENTIFIER[i]) { throw new BiffException(BiffException.unrecognizedOLEFile); } } </pre> <br /> <br />说明咱导入的这个excel不是jxl认定的标准OLE file,真是见鬼了。。打开也好好的是excel。怎么就不是标准的OLE file? <br /> <br />接着查这批不能导入的excel到底有什么问题,查来查去后来无意中用ultraEdit打开了一下,结果发现居然不是2进制文件,而是一个网页文件。马上打开另外一个可以导入的xls文件,发现直接出来的是2进制。继续打开前一个不能导入的excel文件仔细查看,结果在选择另存为的时候跳出来是这个样子: <br /><img src="http://photos.album.mop.com/c03/69/6f/72/726f69778f/md_1217185480508.jpg" /> <br />原来发现本质是个网页文件。。 <br /> <br />然后再尝试不加引号保存,发现保存完图标也变了。文件名变成demo.xls.htm  这下基本确定这批excel文件其实都是网页文件,解决办法我就是先让客户全部另存一下,选择ms excel工作簿保存再导入。 <br /> <br />然后客户需求来了,问我为啥要另存一下,不是数据都在的么? <br /> <br />查了半天资料,解决不掉这个囧问题。 总结了下面几点: <br /> <br />1.加引号“demo.xls” 和不加引号保存成网页文件为什么结果不同?如果加了引号但是不加".xls"的话还是保存为网页格式,并不会批个xls的外壳。 <br /> <br />2.jxl没有能力辨别这样的xls文件。。只能抛BiffException。。以后各位兄弟操作excel的时候如果抛了BiffException异常,各位可以看下是不是这个原因。。 <br /> <br />3.有兄弟遇见过这个囧问题么?有啥解决办法么? 去客户那里了解了一下,他们这些excel是让另外一个公司做的,在网页上自动生成下载的,以后让他们一个一个另存估计要骂娘。 <br /> <br /><br /><strong>问题补充</strong><br />要说容错性的话,除了上面碰到的这个情况。其他的抛不能读取的情况我貌似还没见到过。<br /><br />如果上面的类型转换不能通过java来解决的话,只有让用户自己去另存这个唯一的办法了?sigh。。。<br /><br /><br /><br /><strong>问题补充:</strong><br />我囧。。。 <br /> <br />半年前的东西怎么出现到这里来了。。 <br /> <br />最后我是用Lucas Lee的做法解决的,先判断是不是OLE格式,然后如果是的话就走jxl路线,如果不是 就当处理html一样按文本方式读入解决。。很累人。。
java中excel写入,为什么只显示一行?
public static void main(String[] args) throws Throwable{ int q=0; String fileName="C:\\Users\\Chen\\Desktop\\123.xls";//以下是读取一个excel文件 File file=new File(fileName); Workbook rb=Workbook.getWorkbook(file); WritableWorkbook wb=Workbook.createWorkbook( new File( "test.xls" ));//以下是生成一个excel文件 WritableSheet new_sheet = wb.createSheet( "sheet" , 0 ); Sheet sheet=rb.getSheet(0); for(int i=0;i<sheet.getRows();i++){ for(int j=0;j<sheet.getColumns();j++){ Cell cell=sheet.getCell(j,i); String[] s; s=cell.getContents().split(";");//作者分列,存储到字符串数组中。 int m=s.length; System.out.println(m); if(m==1){ Label label = new Label(0,q++,s[0]); System.out.println(s[0]); new_sheet.addCell(label); wb.write(); }else{ for(int w=0;w<m;w++){ for(int x=w+1;x<m;x++){ Label label = new Label(0,q,s[w]); System.out.println(s[w]); new_sheet.addCell(label); Label label2 = new Label(1,q++,s[x]); System.out.println(s[x]); new_sheet.addCell(label2); wb.write(); } } } } } wb.close(); ![图片说明](https://img-ask.csdn.net/upload/201605/03/1462284278_703096.png) 初步学习java,请大神指点~~
java+poi实现下面的格式
![图片说明](https://img-ask.csdn.net/upload/201601/25/1453692519_563496.png) 请问怎么实现框框圈起来的部分?? 我的代码如下: public class ExportToExcelServiceImpl implements ExportToExcelService { @Autowired private ExportToExcelDao exportToExcelDao; public void setExportToExcelDao(ExportToExcelDao exportToExcelDao) { this.exportToExcelDao = exportToExcelDao; } /** * 导出合作渠道 * * @param HttpServletRequest * request, HttpServletResponse response, String startData, * String endtData * @return * */ @Override public void exportChannelToExcel(HttpServletRequest request, HttpServletResponse response, String startData, String endtData) { /** * 取出渠道数据 * */ List<CooperationChannel> channelList = exportToExcelDao .exportChannelToExcel(startData, endtData); // List<CooperationChannel> channelList = exportToExcelDao // .exportChannelToExcel(); /** * 创建渠道统计的excel * */ // 下载生成的合作渠道报表到自定义的位置 try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream"); // 设置生成的文件类型 String filedisplay = "合作渠道报表.xls"; try { filedisplay = URLEncoder.encode(filedisplay, "UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } response.addHeader("Content-Disposition", "attachment;filename=" + filedisplay); // 设置文件头编码方式和文件名 // 创建一个workbook 对应一个excel应用文件 HSSFWorkbook workBook = new HSSFWorkbook(); // 在workbook中添加一个sheet,对应Excel文件中的sheet CellRangeAddress cra = new CellRangeAddress(0, 0, 0, 15); CellRangeAddress cra1 = new CellRangeAddress(1, 1, 0, 4); CellRangeAddress cra2 = new CellRangeAddress(1, 1, 5, 9); // CellRangeAddress cra3 = new CellRangeAddress(1, 1, 10, 15); HSSFSheet sheet = workBook.createSheet("合作渠道"); // 在sheet里增加合并单元格 sheet.addMergedRegion(cra); sheet.addMergedRegion(cra1); sheet.addMergedRegion(cra2); // sheet.addMergedRegion(cra3); // 获取表格样式 ExportUtil exportUtil = new ExportUtil(workBook, sheet); HSSFCellStyle titleStyle = exportUtil.getTitleStyle(); HSSFCellStyle titleStyle1 = exportUtil.getTitleStyle1(); HSSFCellStyle headStyle = exportUtil.getHeadStyle(); HSSFCellStyle bodyStyle = exportUtil.getBodyStyle(); // 构建表标题1 HSSFRow head = sheet.createRow(0); HSSFCell cell = null; String headTitle = "合作渠道数据统计表"; cell = head.createCell(0); cell.setCellStyle(titleStyle); cell.setCellValue(headTitle); // 构建表标题2 HSSFRow head1 = sheet.createRow(1); HSSFCell cell1 = null; String headTitle1= "部门:市场品牌部"; cell1 = head1.createCell(5); cell1.setCellStyle(titleStyle1); cell1.setCellValue(headTitle1); // 构建表标题2 // HSSFRow head2 = sheet.createRow(1); HSSFCell cell2 = null; String headTitle2= "日期:"; cell2 = head1.createCell(5); cell2.setCellStyle(titleStyle1); cell2.setCellValue(headTitle2); // // 构建表标题2 // HSSFRow head3 = sheet.createRow(1); // HSSFCell cell3 = null; // String headTitle3= "单位:元"; // cell3 = head3.createCell(4); // cell3.setCellStyle(headStyle); // cell3.setCellValue(headTitle3); // String[] headTitle1 = new String[] { "部门:市场品牌部", "日期:", "单位:元" }; // for (int i = 0; i < headTitle1.length; i++) { // cell = head1.createCell(i); // cell.setCellStyle(titleStyle1); // cell.setCellValue(headTitle1[i]); // } // 构建表头 HSSFRow headRow = sheet.createRow(2); String[] titles = new String[] { "序号", "渠道名称", "点击量", "下载量", "激活数", "注册数", "注册率", "实名数", "实名率", "登录数", "绑卡数", "绑卡率", "投资数", "投资率", "充值总额", "投资总额" }; for (int i = 0; i < titles.length; i++) { cell = headRow.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(titles[i]); } // 构建表体数据 if (channelList != null && channelList.size() > 0) { for (int j = 2; j < channelList.size(); j++) { HSSFRow bodyRow = sheet.createRow(j + 1); CooperationChannel cooperationChannel = channelList.get(j); // getChannel_id,并把数据写入excel中的单元格,下同。 cell = bodyRow.createCell(0); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getChannel_id()); // getChannel_name cell = bodyRow.createCell(1); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getChannel_name()); // getClick_amount cell = bodyRow.createCell(2); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getClick_amount()); // getDownload_amount cell = bodyRow.createCell(3); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getDownload_amount()); // getActivation_amount cell = bodyRow.createCell(4); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getActivation_amount()); // getRegister_amount cell = bodyRow.createCell(5); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getRegister_amount()); // getRegister_rate cell = bodyRow.createCell(6); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getRegister_rate()); // getAutonym_amount cell = bodyRow.createCell(7); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getAutonym_amount()); // getAutonym_rate cell = bodyRow.createCell(8); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getAutonym_rate()); // getLogin_amount cell = bodyRow.createCell(9); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getLogin_amount()); // getBound_card_amount cell = bodyRow.createCell(10); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getBound_card_amount()); // getBound_card_rate cell = bodyRow.createCell(11); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getBound_card_rate()); // getInvestment_amount cell = bodyRow.createCell(12); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getInvestment_amount()); // getInvestment_rate cell = bodyRow.createCell(13); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getInvestment_rate()); // getRecharge_total_amount cell = bodyRow.createCell(14); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getRecharge_total_amount()); // getInvestment_total_amount cell = bodyRow.createCell(15); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel .getInvestment_total_amount()); } } try { // FileOutputStream fos = new FileOutputStream( // "C:\\Users\\lida\\Desktop\\testData\\fr0_markbran_001.xls"); OutputStream ops = response.getOutputStream(); workBook.write(ops); ops.flush(); ops.close(); } catch (IOException e) { e.printStackTrace(); // } finally { // try { // // fos.close(); // } catch (IOException e) { // e.printStackTrace(); // } } }
急 在线等 谢谢!java想要读取excel中某以特定单元格的值,现在是循环读出所有的值,请帮忙修改一下
package com.excel.action; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.write.Label; import jxl.write.NumberFormats; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class JxlTable { private final static JxlTable jxlTable = new JxlTable(); public static JxlTable getInstance() { return jxlTable; } public JxlTable() { } public boolean createTable(String[][] body, String filePath,int rowLength) { boolean createFlag = true; WritableWorkbook book; try { // 根据路径生成excel文件 book = Workbook.createWorkbook(new File(filePath)); // 创建一个sheet名为"表格" WritableSheet sheet = book.createSheet("表格", 0); // 设置NO列宽度 sheet.setColumnView(1, 5); // 去掉整个sheet中的网格线 sheet.getSettings().setShowGridLines(false); Label tempLabel = null; // 表体输出 int bodyLen = body.length; String[][] bodyTempArr = body ; // 循环写入表体内容 for(int i=0;i<rowLength;i++) { for(int j=0;j<body[i].length;j++) { WritableCellFormat tempCellFormat = null; tempCellFormat = getBodyCellStyle(); if (tempCellFormat != null) { if (j == 0 || j == (bodyTempArr.length - 1)) { tempCellFormat.setAlignment(Alignment.CENTRE); } } tempLabel = new Label(1 + j, 2 + i, bodyTempArr[i][j], tempCellFormat); sheet.addCell(tempLabel); } } book.write(); book.close(); } catch (IOException e) { createFlag = false; System.out.println("EXCEL创建失败!"); e.printStackTrace(); } catch (RowsExceededException e) { createFlag = false; System.out.println("EXCEL单元设置创建失败!"); e.printStackTrace(); } catch (WriteException e) { createFlag = false; System.out.println("EXCEL写入失败!"); e.printStackTrace(); } return createFlag; } public WritableCellFormat getHeaderCellStyle() { WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE); WritableCellFormat headerFormat = new WritableCellFormat( NumberFormats.TEXT); try { // 添加字体设置 headerFormat.setFont(font); // 设置单元格背景色:表头为黄色 headerFormat.setBackground(Colour.YELLOW); // 设置表头表格边框样式 // 整个表格线为粗线、黑色 headerFormat.setBorder(Border.ALL, BorderLineStyle.THICK, Colour.BLACK); // 表头内容水平居中显示 headerFormat.setAlignment(Alignment.CENTRE); } catch (WriteException e) { System.out.println("表头单元格样式设置失败!"); } return headerFormat; } public WritableCellFormat getBodyCellStyle() { WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE); WritableCellFormat bodyFormat = new WritableCellFormat(font); try { // 设置单元格背景色:表体为白色 bodyFormat.setBackground(Colour.WHITE); // 设置表头表格边框样式 // 整个表格线为细线、黑色 bodyFormat .setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); } catch (WriteException e) { System.out.println("表体单元格样式设置失败!"); } return bodyFormat; } /** * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 * @param file 读取数据的源Excel * @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1 * @return 读出的Excel中数据的内容 * @throws FileNotFoundException * @throws IOException */ public static String[][] getData(File file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); int rowSize = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream( file)); // 打开HSSFWorkbook POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFCell cell = null; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { HSSFSheet st = wb.getSheetAt(sheetIndex); // 第一行为标题,不取 for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { HSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (cell != null) { // 注意:一定要设成这个,否则可能会出现乱码 cell.setEncoding(HSSFCell.ENCODING_UTF_16); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (date != null) { value = new SimpleDateFormat("yyyy-MM-dd") .format(date); } else { value = ""; } } else { value = new DecimalFormat("0").format(cell .getNumericCellValue()); } break; case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值 if (!cell.getStringCellValue().equals("")) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 去掉字符串右边的空格 * @param str 要处理的字符串 * @return 处理后的字符串 */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (str.charAt(i) != 0x20) { break; } length--; } return str.substring(0, length); } public static void main(String[] args) throws Exception { File file = new File("F:/tomcat7/webapps/Excel/upload/3.xls"); String[][] result = getData(file, 1); int rowLength = result.length; System.out.println("rowLength="+rowLength); for(int i=0;i<rowLength;i++) { for(int j=0;j<result[i].length;j++) { System.out.print(result[i][j]+"\t\t"); } System.out.println(); } String[][] body = result; String filePath = "F:/tomcat7/webapps/Excel/upload/68.xls"; JxlTable testJxl = JxlTable.getInstance(); boolean flag = testJxl.createTable(body, filePath,rowLength); if (flag) { System.out.println("表格创建成功!!"); } } }
PLupload 上传后文件重复了四份,并且每一份都是大小相等的,无法打开;
![图片说明](https://img-ask.csdn.net/upload/201905/05/1557047397_761969.jpg) ``` $("#uploader").pluploadQueue({ runtimes : 'gears,flash,silverlight,browserplus,html5,html4',//用来指定上传方式,指定多个上传方式请使用逗号隔开。一般情况下,你不需要配置该参数 url : CONTENT_PATH+'/record/file.do', max_file_size : '10mb', unique_names : true,//当值为true时会为每个上传的文件生成一个唯一的文件名,并作为额外的参数post到服务器端,参数明为name,值为生成的文件名。 multiple_queues : true, chunk_size: '10mb', dragdrop: false, // Specify what files to browse for /*filters : [ //可以使用该参数来限制上传文件的类型,大小等,该参数以对象的形式传入,它包括三个属性: {title : "doc, doc文档", extensions : "jpg,jpeg,png,gif,zip,rar,pdf,docx,doc,xlsx,xls,pptx,ppt,vsd,vsdx"} {title : "doc, doc文档", extensions : "zip,rar,pdf,docx,doc,xlsx,xls"} ],*/ flash_swf_url : CONTENT_PATH+'/js/plupload/js/plupload.flash.swf',//当使用flash上传方式会用到该参数。 silverlight_xap_url : CONTENT_PATH+'/js/plupload/js/plupload.silverlight.xap',//当使用silverlight上传方式会用到该参数。 }); ``` 上传完成后 ![图片说明](https://img-ask.csdn.net/upload/201905/05/1557048191_26865.jpg)
jxl中对Excel表格操作出现的问题
package Excel; import java.io.File; import java.text.SimpleDateFormat; import java.util.TimeZone; import jxl.DateCell; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class CreateExcel { public static void main(String args[]) { try { // 打开文件 WritableWorkbook book = Workbook.createWorkbook(new File( " test.xls ")); // 生成名为“第一页”的工作表,参数0表示这是第一页 WritableSheet sheet = book.createSheet(" 第一页 ", 0); TimeZone gmtZone = TimeZone.getTimeZone("GMT"); SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy"); format.setTimeZone(gmtZone); DateCell dateCell = null; String dateString = format.format(dateCell.getDate()); Label label5 = new Label(0, 6, dateString); sheet.addCell(label5); book.write(); book.close(); } catch (Exception e) { System.out.println(e); } } } 出现 :java.lang.NullPointerException问题
请问:如何利用jxl包更改大容量excel表的数据?
请各位帮忙!谢谢! 我有一个excel文件大小为11M左右,使用jxl包更改表格内容出现以下提示: init: deps-jar: compile-single: run-single: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at jxl.write.biff.WritableSheetImpl.getRowRecord(WritableSheetImpl.java:1223) at jxl.write.biff.WritableSheetImpl.addCell(WritableSheetImpl.java:1151) at jxl.write.biff.SheetCopier.shallowCopyCells(SheetCopier.java:945) at jxl.write.biff.SheetCopier.copySheet(SheetCopier.java:219) at jxl.write.biff.WritableSheetImpl.copy(WritableSheetImpl.java:1584) at jxl.write.biff.WritableWorkbookImpl.copyWorkbook(WritableWorkbookImpl.java:971) at jxl.write.biff.WritableWorkbookImpl.<init>(WritableWorkbookImpl.java:343) at jxl.Workbook.createWorkbook(Workbook.java:339) at jxl.Workbook.createWorkbook(Workbook.java:320) at kangxidic.Main.find_string(Main.java:161) at kangxidic.Main.main(Main.java:201) Java Result: 1 生成成功(总时间:16 秒) 附:部分代码 public static void find_string() { try { //创建只读的Excel工作薄的对象 Workbook rw = Workbook.getWorkbook(new File("C://kangxi.xls")); //创建可写入的Excel工作薄对象 WritableWorkbook writeWB = Workbook.createWorkbook(new File("C://kangxi.xls"), rw); //读取第一张工作表 WritableSheet writeSHT = writeWB.getSheet(0); //获得第一个单元格对象 WritableCell writeCL = writeSHT.getWritableCell(0, 1); //判断单元格的类型, 做出相应的转化 if(writeCL.getType() == CellType.LABEL) { Label l = (Label)writeCL; l.setString("aaaaaaaa."); } //写入Excel对象 writeWB.write(); //关闭可写入的Excel对象 writeWB.close(); //关闭只读的Excel对象 rw.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("写入Excel文件失败,可能该文件正在被使用!"); } } public static void main(String[] args) { find_string(); } [b]问题补充:[/b] 我用的是netbeans,配置参数改过以后还是同样的错误提示!
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问