Windows下查看端口被占用情况
今天开发时遇到的问题~~端口被占用~~想知道哪个程序占用了此端口~~百度了下,虽然后面解决问题是直接重启电脑了。。
但是学习了一招:
windows下如何查看端口被哪个程序占用了? 按照以下步骤:
1. cmd >> netstat –ano 可以看到使用端口情况。注意对照PID 一栏如图:
2.接着输入 tasklist 可以看到任务运行情况
3.请看PID一栏,查看某个端口的使用,记住这个端口所对应的PID,然后在任务列表中通过PID来找到端口被哪个程序所使用,
接下来就可以通过打开任务管理器 来关闭被占用端口所使用的程序,还可以通过以下命令快速关闭任务。
命令如下: taskkill /pid 1040 /t /f 即可。
当然现在有许多防火墙都有此功能~呵~
Spring中ApplicationContextAware接口用法
加载Spring配置文件时,如果Spring配置文件中所定义的Bean类,如果该类实现了ApplicationContextAware接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware接口中的
public void setApplicationContext(ApplicationContext context) throws BeansException
方法,并且自动可获得ApplicationContext 对象。前提必须在Spring配置文件中指定改类。
一个Demo程序如下:
Spring配置文件中配置:
<bean id="springContext" class="com.shine.spring.SpringContextHelper"></bean>
/** * ApplicationContext的帮助类 * 自动装载ApplicationContext * * @author ChenST * @create 2010-6-24 * */ public class SpringContextHelper implements ApplicationContextAware { private static ApplicationContext context ; /* * 注入ApplicationContext */ @Override public void setApplicationContext(ApplicationContext context) throws BeansException { //在加载Spring时自动获得context SpringContextHelper.context = context; System.out.println(SpringContextHelper.context); } public static Object getBean(String beanName){ return context.getBean(beanName); } }
Excel 单元格里换行按"Alt+Enter"
无比囧~~
Excel里换行按“Enter”总是到下一个单元格去~~
原来在单元格里换行是按“Alt+Enter”
使用pdfBox读取PDF文件注意问题
本来想要iText来读取pdf的,结果网上搜索下得出结论,使用iText读取pdf基本上是无法实现的。
于是还是改用了pdfBox来读取文件。于是造成了iText与pdfBox混用的尴尬。
虽然如此,但也遇到了不少问题。下面分析遇到的问题。
---------------------------------------------------------------------------------
1.首先最好要下载pdfbox 1.1的版本。处理文档方面比较完善,如果是低版本的话,是不支持字体与语言的读取。会报错。
2.另外还要下载fontbox 1.1 的包,这对多种字体以及多种语言的支持。注意版本,不然会报有一些类找不到。
3.还要加入common-loggin的包,不然进行读取的时候会遇到类找不到异常,主要是用到org.apache.commons.logging.LogFactory类
---------------------------------------------------------------------------------
遇到的问题主要是使用的包版本太对,或者两者的版本不匹配造成的。
贴个使用pdfbox来读取pdf文档内容的代码:
/** * 读取指定路径的pdf文件的文本内容<br> * @param filePath 指定路径 * @return pdf文件的文本内容 * @throws IOException */ public String readPdf(String filePath) throws IOException{ File file = new File(filePath); FileInputStream fis = new FileInputStream(file); //创建一个PDF解析器 PDFParser parser = new PDFParser(fis); //进行解析 parser.parse(); //得到PDF文档对象 PDDocument document = parser.getPDDocument(); //新建一个PDF文件剥离器 PDFTextStripper stripper = new PDFTextStripper(); //从文档对象中剥离文本 String content = stripper.getText(document); fis.close(); document.close(); return content;
Java操作Excel文件之使用JXL 学习笔记
百科上对于JXL的说明:
通过java操作excel表格的工具类库
支持Excel 95-2000的所有版本
生成Excel 2000标准格式
支持字体、数字、日期操作
能够修饰单元格属性
支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 |
前几天学习了下,总结备忘下:贴个关于Excel操作类的代码:(需要加入jxl.jar包)
/** * * <pre> * MS Office Excel 文件操作对象 * 注:利用第三方包jxl.jar进行操作 * 注:暂不支持excel2007版本新格式xlsx后缀名 * 提供操作内容: * 1.创建Excel文件 * 2.读取Excel文件 * 3.导出(写入)Excel文件 * 4.判断是否为Excel文件 * </pre> * * @author 陈书挺 * @create 2010-6-12 * @version v1.0 * * <pre> * 修改时间 修改人 修改原因 * 2010-6-12 陈书挺 新建类 * 2010-6-13 陈书挺 修改createExcel(String)方法 | 增加createExcel(String, String...)方法 * </pre> * */ public class ExcelOperator { /* * Excel文件后缀名 */ private static final String EXCEL_POSTFIX = ".xls"; /** * 创建指定的文件路径的一个Excel文件<br> * 默认创建3个工作表分别为:Sheet1|Sheet2|Sheet3<br> * 注:只支持xls格式的文件 * @param filePath 文件路径 * @throws Exception */ public void createExcel(String filePath) throws Exception{ this.createExcel(filePath, "Sheet1" , "Sheet2" , "Sheet3"); } /** * 创建指定的文件路径的一个Excel文件,并指定工作表名<br> * 注:只支持xls格式的文件 * @param filePath 文件路径 * @param sheetNames 工作表名数组 * @throws Exception */ public void createExcel(String filePath , String...sheetNames) throws Exception{ if(!this.isExcel(filePath)){ throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件"); } File file = new File(filePath); //工厂方法创建一个可写入的工作薄(WorkBook) WritableWorkbook workBook = Workbook.createWorkbook(file); //创建一个可写入的工作表(Sheet) 得到的对象为WritableSheet对象 //工作表名 工作表在工作簿中的位置 for (int i = 0; i < sheetNames.length; i++) { workBook.createSheet(sheetNames[i], i); } workBook.write(); workBook.close(); } /** * 读取指定文件路径的Excel文件,以集合方式返回<br> * 说明:读取所有工作表的内容 * @param filePath 文件路径 * @return List集合,List集合中的元素表示一个工作表 * List中存储String[][]数组,一个数组表示存储工作表的内容 * 返回文件中的所有内容 * @throws Exception */ public List<String [][]> readExcel(String filePath) throws Exception{ if(!this.isExcel(filePath)){ throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件"); } List<String [][]> contents = new ArrayList<String[][]>(); File file = new File(filePath); //创建工作薄 Workbook workBook = Workbook.getWorkbook(file); //获取工作表 Sheet [] sheets = workBook.getSheets(); if(sheets!=null && sheets.length>0){ for (int i = 0; i < sheets.length; i++) { String[][] content = this.readExcel(filePath, i); contents.add(content); } } workBook.close(); return contents; } /** * 将指定内容写入指定的Excel文件,并指定相应的工作表名 * @param filePath 文件路径 * @param contents 数据内容 * @param sheetName 工作表名 * @throws Exception */ public void writeExcel(String filePath , String [][] contents ,String sheetName) throws Exception{ if(!this.isExcel(filePath)){ throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件"); } File file = new File(filePath); //工厂方法创建一个可写入的工作薄(WorkBook) WritableWorkbook workBook = Workbook.createWorkbook(file); WritableSheet sheet = workBook.createSheet(sheetName, 0); for (int i = 0; i < contents.length; i++) { for (int j = 0; j < contents[i].length; j++) { sheet.addCell(new Label(j,i,contents[i][j])); } } workBook.write(); workBook.close(); } /** * 将指定内容写入指定的Excel文件,并指定相应的工作表名 * @param filePath 文件路径 * @param contents 数据内容 * @param sheetName 工作表名 * @throws Exception */ public void writeExcel(String filePath , Vector<Vector<String>> contents , String sheetName) throws Exception{ this.writeExcel(filePath, StringUtils.toStringArray(contents), sheetName); } /** * 读取指定文件路径、指定工作表索引的Excel文件 * * @param filePath Excel文件路径 * @param sheetIndex 工作表索引 从0开始 * @return 与Excel结构相似的二维数组,二维数组中存储的是表格中的内容 * @throws Exception */ public String [][] readExcel(String filePath , int sheetIndex) throws Exception{ if(!this.isExcel(filePath)){ throw new Exception("文件必须是Excel文件,必须是xls格式的文件"); } File file = new File(filePath); //创建工作薄 Workbook workBook = Workbook.getWorkbook(file); //获取工作表 Sheet [] sheets = workBook.getSheets(); if(sheetIndex>sheets.length-1){ throw new Exception("工作表索引["+sheetIndex+"]超出范围"); } //获取指定工作表 Sheet sheet = sheets[sheetIndex]; //获取当前工作薄的行数 int rows = sheet.getRows(); //获取当前工作薄的列数 int columns = sheet.getColumns(); //存储Excel中的数据 String [][] content = new String[rows][columns]; this.initArrays(content); for (int i = 0; i < rows; i++) { //得到当前行的所有单元格 Cell [] cells = sheet.getRow(i); if(cells!=null && cells.length>0){ for (int j= 0; j < cells.length; j++) { String cellContent = cells[j].getContents(); content[i][j]=cellContent; } } } workBook.close(); return content; } /** * 判断指定文件的路径是否是Excel文件 * @param filePath 文件的路径 * @return 是否是Excel文件 * true:是Excel文件 * false:不是Excel文件 */ public boolean isExcel(String filePath){ //获取文件后缀名 String postfix = FileUtils.getPostfix(filePath); if(!postfix.equals(ExcelOperator.EXCEL_POSTFIX)){ return false; } return true; } /* * 初始化二维数组内容为"" * @param arrays 要初始化二维数组 */ private void initArrays(String [][] arrays){ for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays[i].length; j++) { arrays[i][j]=""; } } } }
使用iText5.x创建PDF中文处理问题
今天无意中在网上看到iText这个东东,iText 是利用Java 来操作PDF 操作的一种开源API
简单说明下使用该API创建PDF文件的过程
PS:使用的是iText5.x版本
/** * 创建PDF文件 * @param filePath 文件路径 * @param content 需要写入的内容 * @throws DocumentException * @throws IOException */ public void createPdf(String filePath ,String content) throws DocumentException, IOException{ //1.创建Document对象 Document document = new Document(); FileOutputStream fos = new FileOutputStream(filePath); //2.创建一个PdfWriter实例 PdfWriter.getInstance(document, fos); //3.打开文档 document.open(); Paragraph graph = new Paragraph(content); //4.加入段落 document.add(graph); //5.关闭文档 document.close(); }
利用上述程序,运行结果。发现,只有英文部分被写入,中文部分无法被写入。百度得到结论:
需要加入itextasian.jar包,itextasian.jar包有实现了对中文字体的支持。因此加载itextasian.jar到classpath下。
在上述代码中加入如下代码:
BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font fontChinese = new Font(baseFontChinese , 12 , Font.NORMAL); Paragraph graph = new Paragraph(content , fontChinese);
运行,得到如下异常:
Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized
还是不行,继续研究,在网上前辈们说如下原因:
iText5.x版本以上中的font和encoding文件都是从String RESOURCE_PATH = "com/itextpdf/text/pdf/fonts/"加载的,而老itextasian.jar的包名是com.lowagie.text.pdf.fonts, 包名不一致导致路径错误,。 |
具体解决方法就是修改包的路径了,详细方法如下:
1.解压iTextAsian.jar 得到如下目录: iTextAsian --com --lowagie --text --fonts --...(字体属性文件) 2.将解压后的com目录下的包名lowagie更改为itextpdf 3.在命令行转至iTextAsian目录,重新打包为iTextAsian.jar文件 4.打包命令如下: jar cvf iTextAsian.jar com/itextpdf/text/pdf/fonts/* 5.执行后,将新的iTextAsian.jar加入classpath路径 |
运行结果,OK,解决问题。
最终代码如下:
/** * 创建PDF文件 * @param filePath 文件路径 * @param content 需要写入的内容 * @throws DocumentException * @throws IOException */ public void createPdf(String filePath ,String content) throws DocumentException, IOException{ //1.创建Document对象 Document document = new Document(); FileOutputStream fos = new FileOutputStream(filePath); //2.创建一个PdfWriter实例 PdfWriter.getInstance(document, fos); //3.打开文档 document.open(); BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font fontChinese = new Font(baseFontChinese , 12 , Font.NORMAL); Paragraph graph = new Paragraph(content , fontChinese); document.add(graph); document.close(); }
继续研究ing~~