Java常用的一些工具方法

       因为自己在开发中,遇到很多一些比较常用的工具类方法,有时候写了又不记得了,然后又要花很多时间去整理和查阅资料,很苦恼,所以就把自己开发中遇到的一些工具类方法记录下来,也方便更多的人一起学习。别忘记了,,我这可是随时更新的哦~~我相信,对你是非常有用的,所以想了解更新和更多的干活的,就必须要加我粉丝哈~~!!咳咳,好了,进入正文~~~~~

一:将中文转为拼音

/**
	 * 得到 全拼
	 * 
	 * @param src
	 * @return
	 */
	public static String getPingYin(String src) {
		char[] t1 = null;
		t1 = src.toCharArray();
		String[] t2 = new String[t1.length];
		HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
		t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		t3.setVCharType(HanyuPinyinVCharType.WITH_V);
		String t4 = "";
		int t0 = t1.length;
		try {
			for (int i = 0; i < t0; i++) {
				// 判断是否为汉字字符
				if (java.lang.Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
					t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);
					t4 += t2[0];
				} else {
					t4 += java.lang.Character.toString(t1[i]);
				}
			}
			return t4;
		} catch (BadHanyuPinyinOutputFormatCombination e1) {
			e1.printStackTrace();
		}
		return t4;
	}

二:获取中文的第一个字母

/**
	 * 得到中文首字母
	 * 
	 * @param str
	 * @return
	 */
	public static String getPinYinHeadChar(String str) {

		String convert = "";
		for (int j = 0; j < str.length(); j++) {
			char word = str.charAt(j);
			String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
			if (pinyinArray != null) {
				convert += pinyinArray[0].charAt(0);
			} else {
				convert += word;
			}
		}
		return convert;
	}

三:将字符串转为ASCII码

public static String getCnASCII(String cnStr) {
		StringBuffer strBuf = new StringBuffer();
		byte[] bGBK = cnStr.getBytes();
		for (int i = 0; i < bGBK.length; i++) {
			// System.out.println(Integer.toHexString(bGBK[i]&0xff));
			strBuf.append(Integer.toHexString(bGBK[i] & 0xff));
		}
		return strBuf.toString();
	}

四:这里说一个非常重要的地方,就是关于文件流的知识(非常非常重要~~~~~~)

首先说一下,这下面就是完整的几个实例了,如果你有自己的需要,只要看懂我写的代码就自行更改就可以了,我相信都可以看懂的,因为真的真的写得很简单了~·(这些自己还是用心进行编写了的哈~!)

(1)读取TXT文件

package com.hnu.scw.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @author scw
 * 2017-11-12
 * function: 读取txt文件的内容
 *
 */
public class ReadTxtContent {

	/**
	 * 读取txt文件
	 * @param fileName:需要读取txt文件的路径
	 * @return 返回读取到的内容,保存的是在一个list集合中
	 */
	public static List readTxt(String fileName){		
		try {
			File file = new File(fileName);
			//判断读取的文件是否有,如果没有就创建一个空的,其实这里不处理也可以,因为抛了异常
			if(!file.exists()){
				file.createNewFile();
			}
			//打开读取txt文件流
			FileInputStream fr = new FileInputStream(file);
			InputStreamReader af=new InputStreamReader(fr);
			BufferedReader bf=new BufferedReader(af);
			//用于存储读取到的内容
			List content = new ArrayList();
			String line=bf.readLine();
			content.add(line);			
			while(line!=null) //判断是否读取到最后
			{
				line=bf.readLine();	
				//保存读取内容
				content.add(line);		
			}
			return content;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
		
	}

}

(2)读取Excl文件-----后缀为.xls

package com.hnu.scw.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 * 读取Excl表格中的内容,主要后缀是.xls的
 * @author scw
 * 2017-11-12
 * 备注:要使用这个方法的时候,记得要导入lib中包含的包
 *
 */
public class ReadExclContent {

	/**
	 * 读取Excl表格内容
	 * @param exclFile:excl路径
	 * @return
	 */
	public static List readExcl(String exclFile){
		Workbook rwb = null;
		InputStream is;
		try {
			is = new FileInputStream(exclFile);
			rwb = Workbook.getWorkbook(is);
		}catch (Exception e) {
			e.printStackTrace();
		} 
		int sheets = rwb.getNumberOfSheets();
		Sheet rs = rwb.getSheet(0);
		String sheetName = rs.getName();// 获取Sheet的名称
		int rsColumns = rs.getColumns();// 获取Sheet表中所包含的总列数	
		int rsRows = rs.getRows(); // 获取Sheet表中所包含的总行数	
		List list = new ArrayList();
		//获取到第一列标题的内容
		String[] head = new String[rsColumns];		
		//注意getCell方法是先列,后行的取法	
		Cell c = null;
		for(int i = 0 ; i < rsColumns ; i++){
			c = rs.getCell(i, 0);//获取到标题栏的每一列的内容;	
			head[i] = c.getContents();
		}
		
		Cell cell = null;
		int currentReadIndex = 1 ; //用于记录当前读取的内容条数 
		for (int j = 1; j < rsRows; j++) { //遍历总行数,从第一行开始读取	
			cell = rs.getCell(0, j);    //获取对应行第一列的对象
			if(Integer.parseInt(cell.getContents()) == 0){  //(1)这里0表示是选择题,过滤掉判断题
				cell = rs.getCell(1, j);    //获取到对应第二列的单元格对象
				//(2)判断题目的章节是是否是小于等于第四章的,因为这次只需要考到前面四章的内容
				if(Integer.parseInt(cell.getContents()) <= 4){	
					for (int i = 2; i < rsColumns; i++) {//遍历总列数		
						cell = rs.getCell(i, j);
							if(i == 2 ){ 				//(3)这里我要序号,所以要分情况,第一列我就换成序号了
								list.add( currentReadIndex + ":" + cell.getContents());
								currentReadIndex++ ;
							}
							else { //(4)因为前面两列的处理不需要这里进行,所以过滤掉了
								list.add(head[i] + cell.getContents());
							}
						}			
					}
				//读取完一个单元格内容就换行,这里就用@@表示需要换后,写操作的时候再处理(当然这个根据需要来的,不需要就不换行)
				list.add("@@");
			}			
		}
		return list;
	}

}

(3)写数据到TXT中

package com.hnu.scw.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

/**
 * 
 * @author scw
 *2017-11-12
 *function : 将数据写入到Txt文件中
 */
public class Write2Txt {

	/**
	 * 将数据写入到TXT文件
	 * @param list : 数据内容,这里用的是list集合作为参数内容
	 * @param fileName :要写入的文件名
	 */
	public static void writeContent2Txt(List contentList , String fileName){
		File writeTxt = new File(fileName);
		//判断是否有这个文件了
		if(!writeTxt.exists()){ //如果不存在,则创建这个txt文件
			try {
				writeTxt.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//开启写操作
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(writeTxt));
			int writeLength = contentList.size(); // 获取到进行写的内容的大小长度
			String currentContent = "";
			for(int i = 0 ; i < writeLength ; i++){
				currentContent = contentList.get(i); //得到当前的内容
				if("@@".equals(currentContent)){ //如果读取的内容为@@,表示的是换行
					bw.write("\r\n"); // "\r\n"表示换行
				}else{
					bw.write(currentContent);
					bw.write("\r\n"); // "\r\n"表示换行
				}
			}
			bw.flush();
			bw.close(); //关闭流
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	

}

(4)写数据到doc文档中

package com.hnu.scw.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.List;
/**
 * 
 * @author scw
 * 2017-11-12
 * function: 写数据到.doc后缀的文档中
 *
 */
public class Write2Word {
	
	/**
	 * 读取数据,并写入到doc的文件中
	 * @param contentList 需要写的源数据内容
	 * @param fileName 写到的文件路径,比如F:\\text.doc
	 */
	public static void writeContent2Word(List contentList , String fileName){
		try {
			File file = new File(fileName);
			//判断目标路径是否存在
			if(!file.exists()){
				file.createNewFile();
			}
			//打开文件输出流
			FileOutputStream fo=new FileOutputStream(file);
			OutputStreamWriter osw=new OutputStreamWriter(fo);
			BufferedWriter bw=new BufferedWriter(osw);
			//获取读取的长度的大小
			int contentLength = contentList.size();
			String content = "";
			for(int i = 0 ; i < contentLength; i++){
				//获取需要写的内容
				content = contentList.get(i);				
				bw.write(content);
				//换行
				bw.newLine();
				//刷新缓存区
				bw.flush();
			}
		} 	
		catch (Exception e) {
		e.printStackTrace();
		}
	}

}

(5)写数据到PDF中

package com.hnu.scw.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;

/**
 * 写数据到PDF
 * @author scw
 * 2017-11-12
 * function:将数据转为PDF形式
 *
 */
public class Write2PDF {
	/**
	 * 将数据写成pdf的形式
	 * @param filName:写入的目标文件路径
	 * @param contentList :写入的数据,我这里用的是list(具体问题具体的分析)
	 */
	public static void writeContent2PDF(String filName , List contentList){
		try {  
			//加载路径
			File file = new File(filName);
			if(!file.exists()){ //如果没有存在这个文件,那么就创建
				file.createNewFile();
			}
			//打开写操作流
            OutputStream os = new FileOutputStream(file);  
            //创建一个文件对象
            Document document = new Document();  
            //初始化pdf写对象
            PdfWriter.getInstance(document, os); 
            //打开pdf对象
            document.open();  
            //设置写pdf的字体样式(这里设置主要是解决中文的问题,如果不用的话是输出不了中文的)
            BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            Font font = new Font(baseFont);
            //创建一个pdf的段页对象,其实就是相当于一个list保存所有的内容,但是这里还可以设置pdf写的样式,非常有用哦
            Paragraph pg = new Paragraph("",font);
            //开始写操作
            int writeLength = contentList.size(); // 获取到进行写的内容的大小长度
            String currentContent = "";       
            for(int i = 0 ; i < writeLength ; i++){
            	currentContent = contentList.get(i); //得到当前的内容
            	//如果读取的内容为@@,表示的是换行(这里都是根据输入的内容来进行对应操作的,如果你的数据里面并不是这样的形式,那么根据自己的形式进行控制就是了)
            	if("@@".equals(currentContent)){ 
            		pg.add("\n");    //添加一个换行,表示读取一个段落完成了(因为我这数据里面是想把@@分割的内容分为一个段落,所以才这样处理的哦)     		
				}else{
					//将要写入的内容加入到pg对象中
					pg.add(currentContent);    
					//添加一个换行
					pg.add("\n"); 
				}
            }
          //将之前所有的内容进行真正写入到pdf文件中
    		document.add(pg);  
            //关闭文件流
            document.close();  
            //关闭输出流对象
            os.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
	}

}

备注:这里需要导入poi.jar包和itext包,,这个都可以在网上找到的,不过我也在把这几个贴出来吧。。另外,解决中文的问题,还需要一个字体包,,这里也出来了~~

Java常用的一些工具方法_第1张图片

上面几个方法的测试:(真实的案例,全部通过)

package com.hnu.scw.main;
import java.util.List;

/**
 * 
 * @author scw
 *2017-11-12
 *function : 多种文件流的操作
 */
import com.hnu.scw.util.ReadExclContent;
import com.hnu.scw.util.Write2PDF;
import com.hnu.scw.util.Write2Txt;
import com.hnu.scw.util.Write2Word;

public class Excl2Txt {
	public static void main(String[] args) {
		//Excl表的路径
		String exclFile = "F:\\csappquestion.xls";
		//获取到Excl表格的内容
		List readResult = ReadExclContent.readExcl(exclFile);
		//将数据写入到Txt文件中
		//String fileName1 = "F:\\csapp1.txt";
		//Write2Txt.writeContent2Txt(readResult, fileName1);
		//将数据写入到pdf文件中
		//String fileName2 = "F:\\csapppdf.pdf";
		//Write2PDF.writeContent2PDF(fileName2, readResult);
		String fileName3 = "F:\\csappword.doc";
		Write2Word.writeContent2Word(readResult, fileName3);
	}

}

五:下面提供几个常用的代码段吧(我觉得还是比较实用的,不常用就一下忘记了)

(1)得到当前方法的名字

String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
(2)转字符串到日期

java.util.Date = java.text.DateFormat.getDateInstance().parse(date String);
或者

SimpleDateFormat format = new SimpleDateFormat( "dd.MM.yyyy" );  
Date date = format.parse( myString );
(3)JDBC连接Oracle

public class OracleJdbcTest  {  
    String driverClass = "oracle.jdbc.driver.OracleDriver";  

    Connection con;  

    public void init(FileInputStream fs) throws ClassNotFoundException, SQLException, FileNotFoundException, IOException  
    {  
        Properties props = new Properties();  
        props.load(fs);  
        String url = props.getProperty("db.url");  
        String userName = props.getProperty("db.user");  
        String password = props.getProperty("db.password");  
        Class.forName(driverClass);  

        con=DriverManager.getConnection(url, userName, password);  
    }  

    public void fetch() throws SQLException, IOException  
    {  
        PreparedStatement ps = con.prepareStatement("select SYSDATE from dual");  
        ResultSet rs = ps.executeQuery();  

        while (rs.next())  
        {  
            // do the thing you do  
        }  
        rs.close();  
        ps.close();  
    }  

    public static void main(String[] args)  
    {  
        OracleJdbcTest test = new OracleJdbcTest();  
        test.init();  
        test.fetch();  
    }  
}
(4)把Java中的Date转为sql中的date

java.util.Date utilDate = new java.util.Date();  
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
(5) 使用NIO进行快速的文件拷贝
public static void fileCopy( File in, File out )  
            throws IOException  
    {  
        FileChannel inChannel = new FileInputStream( in ).getChannel();  
        FileChannel outChannel = new FileOutputStream( out ).getChannel();  
        try 
        {  
//          inChannel.transferTo(0, inChannel.size(), outChannel);      // original -- apparently has trouble copying large files on Windows  

            // magic number for Windows, 64Mb - 32Kb)  
            int maxCount = (64 * 1024 * 1024) - (32 * 1024);  
            long size = inChannel.size();  
            long position = 0;  
            while ( position < size )  
            {  
               position += inChannel.transferTo( position, maxCount, outChannel );  
            }  
        }  
        finally 
        {  
            if ( inChannel != null )  
            {  
               inChannel.close();  
            }  
            if ( outChannel != null )  
            {  
                outChannel.close();  
            }  
        }  
    }
(6)创建图片的缩略图

private void createThumbnail(String filename, int thumbWidth, int thumbHeight, int quality, String outFilename)  
        throws InterruptedException, FileNotFoundException, IOException  
    {  
        // load image from filename  
        Image image = Toolkit.getDefaultToolkit().getImage(filename);  
        MediaTracker mediaTracker = new MediaTracker(new Container());  
        mediaTracker.addImage(image, 0);  
        mediaTracker.waitForID(0);  
        // use this to test for errors at this point: System.out.println(mediaTracker.isErrorAny());  

        // determine thumbnail size from WIDTH and HEIGHT  
        double thumbRatio = (double)thumbWidth / (double)thumbHeight;  
        int imageWidth = image.getWidth(null);  
        int imageHeight = image.getHeight(null);  
        double imageRatio = (double)imageWidth / (double)imageHeight;  
        if (thumbRatio < imageRatio) {  
            thumbHeight = (int)(thumbWidth / imageRatio);  
        } else {  
            thumbWidth = (int)(thumbHeight * imageRatio);  
        }  

        // draw original image to thumbnail image object and  
        // scale it to the new size on-the-fly  
        BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);  
        Graphics2D graphics2D = thumbImage.createGraphics();  
        graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);  
        graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);  

        // save thumbnail image to outFilename  
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFilename));  
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);  
        quality = Math.max(0, Math.min(quality, 100));  
        param.setQuality((float)quality / 100.0f, false);  
        encoder.setJPEGEncodeParam(param);  
        encoder.encode(thumbImage);  
        out.close();  
    }
(7)生成JSON格式数据(要导入json-rpc.jar包哦,当然还有其他的json包也可以)

JSONObject json = new JSONObject();  
json.put("city", "Mumbai");  
json.put("country", "India");  
String output = json.toString();
(8)抓屏程序(这个还是比较实用的呢。。。。也是偶尔看到的,觉得比较有意思)

import java.awt.Dimension;  
import java.awt.Rectangle;  
import java.awt.Robot;  
import java.awt.Toolkit;  
import java.awt.image.BufferedImage;  
import javax.imageio.ImageIO;  
import java.io.File;  
public void captureScreen(String fileName) throws Exception {  
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();  
   Rectangle screenRectangle = new Rectangle(screenSize);  
   Robot robot = new Robot();  
   BufferedImage image = robot.createScreenCapture(screenRectangle);  
   ImageIO.write(image, "png", new File(fileName));  
}  
(9)创建ZIP和JAR文件(哇塞,这个可有用了~~~感谢网上别人的分享)
import java.util.zip.*;  
import java.io.*;  

public class ZipIt {  
    public static void main(String args[]) throws IOException {  
        if (args.length < 2) {  
            System.err.println("usage: java ZipIt Zip.zip file1 file2 file3");  
            System.exit(-1);  
        }  
        File zipFile = new File(args[0]);  
        if (zipFile.exists()) {  
            System.err.println("Zip file already exists, please try another");  
            System.exit(-2);  
        }  
        FileOutputStream fos = new FileOutputStream(zipFile);  
        ZipOutputStream zos = new ZipOutputStream(fos);  
        int bytesRead;  
        byte[] buffer = new byte[1024];  
        CRC32 crc = new CRC32();  
        for (int i=1, n=args.length; i < n; i++) {  
            String name = args[i];  
            File file = new File(name);  
            if (!file.exists()) {  
                System.err.println("Skipping: " + name);  
                continue;  
            }  
            BufferedInputStream bis = new BufferedInputStream(  
                new FileInputStream(file));  
            crc.reset();  
            while ((bytesRead = bis.read(buffer)) != -1) {  
                crc.update(buffer, 0, bytesRead);  
            }  
            bis.close();  
            // Reset to beginning of input stream  
            bis = new BufferedInputStream(  
                new FileInputStream(file));  
            ZipEntry entry = new ZipEntry(name);  
            entry.setMethod(ZipEntry.STORED);  
            entry.setCompressedSize(file.length());  
            entry.setSize(file.length());  
            entry.setCrc(crc.getValue());  
            zos.putNextEntry(entry);  
            while ((bytesRead = bis.read(buffer)) != -1) {  
                zos.write(buffer, 0, bytesRead);  
            }  
            bis.close();  
        }  
        zos.close();  
    }  
}
(10)解析/读取XML文件,(我想这个很多Java开发者都对这个有印象的吧。。因为很重要和常用呀)
XML文件:

  
     
        John 
        B 
        12 
     
     
        Mary 
        A 
        11 
     
     
        Simon 
        A 
        18 
     
Java代码:

import java.io.File;  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  

import org.w3c.dom.Document;  
import org.w3c.dom.Element;  
import org.w3c.dom.Node;  
import org.w3c.dom.NodeList;  

public class XMLParser {  

    public void getAllUserNames(String fileName) {  
        try {  
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
            DocumentBuilder db = dbf.newDocumentBuilder();  
            File file = new File(fileName);  
            if (file.exists()) {  
                Document doc = db.parse(file);  
                Element docEle = doc.getDocumentElement();  

                // Print root element of the document  
                System.out.println("Root element of the document: " 
                        + docEle.getNodeName());  

                NodeList studentList = docEle.getElementsByTagName("student");  

                // Print total student elements in document  
                System.out  
                        .println("Total students: " + studentList.getLength());  

                if (studentList != null && studentList.getLength() > 0) {  
                    for (int i = 0; i < studentList.getLength(); i++) {  

                        Node node = studentList.item(i);  

                        if (node.getNodeType() == Node.ELEMENT_NODE) {  

                            System.out  
                                    .println("=====================");  

                            Element e = (Element) node;  
                            NodeList nodeList = e.getElementsByTagName("name");  
                            System.out.println("Name: " 
                                    + nodeList.item(0).getChildNodes().item(0)  
                                            .getNodeValue());  

                            nodeList = e.getElementsByTagName("grade");  
                            System.out.println("Grade: " 
                                    + nodeList.item(0).getChildNodes().item(0)  
                                            .getNodeValue());  

                            nodeList = e.getElementsByTagName("age");  
                            System.out.println("Age: " 
                                    + nodeList.item(0).getChildNodes().item(0)  
                                            .getNodeValue());  
                        }  
                    }  
                } else {  
                    System.exit(1);  
                }  
            }  
        } catch (Exception e) {  
            System.out.println(e);  
        }  
    }  
    public static void main(String[] args) {  

        XMLParser parser = new XMLParser();  
        parser.getAllUserNames("c:\\test.xml");  
    }  
}
(11)发送邮件(这个在Web开发中,用得还是比较多的,大家可以看看)
import javax.mail.*;  
import javax.mail.internet.*;  
import java.util.*;  

public void postMail( String recipients[ ], String subject, String message , String from) throws MessagingException  
{  
    boolean debug = false;  

     //Set the host smtp address  
     Properties props = new Properties();  
     props.put("mail.smtp.host", "smtp.example.com");  

    // create some properties and get the default Session  
    Session session = Session.getDefaultInstance(props, null);  
    session.setDebug(debug);  

    // create a message  
    Message msg = new MimeMessage(session);  

    // set the from and to address  
    InternetAddress addressFrom = new InternetAddress(from);  
    msg.setFrom(addressFrom);  

    InternetAddress[] addressTo = new InternetAddress[recipients.length];  
    for (int i = 0; i < recipients.length; i++)  
    {  
        addressTo[i] = new InternetAddress(recipients[i]);  
    }  
    msg.setRecipients(Message.RecipientType.TO, addressTo);  

    // Optional : You can also set your custom headers in the Email if you Want  
    msg.addHeader("MyHeaderName", "myHeaderValue");  

    // Setting the Subject and Content Type  
    msg.setSubject(subject);  
    msg.setContent(message, "text/plain");  
    Transport.send(msg);  
}

六:Java读取Properties文件的方法(主要是说明Properties类的使用)

1。使用java.util.Properties类的load()方法
示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name));
Properties p = new Properties();
p.load(in);

2。使用java.util.ResourceBundle类的getBundle()方法
示例: ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

3。使用java.util.PropertyResourceBundle类的构造函数
示例: InputStream in = new BufferedInputStream(new FileInputStream(name));
ResourceBundle rb = new PropertyResourceBundle(in);

4。使用class变量的getResourceAsStream()方法
示例: InputStream in = JProperties.class.getResourceAsStream(name);
Properties p = new Properties();
p.load(in);

5。使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法
示例: InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
Properties p = new Properties();
p.load(in);

6。使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法
示例: InputStream in = ClassLoader.getSystemResourceAsStream(name);
Properties p = new Properties();
p.load(in);

补充

Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法
示例:InputStream in = context.getResourceAsStream(path);
Properties p = new Properties();
p.load(in);

七:JavaBean中的内省机制,来获取到JavaBean中对应属性的set或者get方法,或者获取到JavaBean中所有的set和get方法

说一下内省机制,这个其实用得地方挺多的,就比如在J2EE开发的时候,servlet后台接受到JSP传送过来的参数;如果参数个数不多,那么直接用request.getparemater()方法就可以了,但是如果多了的话,就很麻烦了对不对呢?再说一下SpringMvc中进行参数接受的时候采取的Model类,这个大家应该都知道吧。其实之所以能够把前端传送的参数都接受,就是有用到了内省机制的。所以,简单点说,内省机制就是能够获取和封装到JavaBean中的属性和方法。。。(SpringMvc的底层源码真的写得很好,可以看看)

进入真正的方法:

JavaBean----------User     (就用这个吧。大家用的多,熟悉些)

public class User {  
    private String name;  
    private int age;  
    public User(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getAge() {  
        return age;  
    }  
    public void setAge(int age) {  
        this.age = age;  
    }  
}  

获取方法:

public class Test {  
    public static void main(String[] args) throws IntrospectionException, InvocationTargetException,  
            IllegalAccessException {  
        User user =new User("zhangsan", 21);  
        String propertyName = "name";  //设置要获取JavaBean中的属性名
        PropertyDescriptor pd=new PropertyDescriptor(propertyName, user.getClass());// 指定获取属性  
        Method readMethod = pd.getReadMethod();//获取到读方法,这个其实就是相当于get方法(反射机制)  
        Object invoke = readMethod.invoke(user, null);// 反射机制调用  
        System.out.println("名字:" + invoke);  
        pd.getWriteMethod().invoke(user, "lisi");  //这个就是相当于set方法
        invoke = readMethod.invoke(user, null);  
        System.out.println("名字:" + invoke);   //通过运行结果来看看
  
        // 获取整个Bean的信息   
        BeanInfo beanInfo= Introspector.getBeanInfo(user.getClass(), Object.class);// 在Object类时候停止检索,可以选择在任意一个父类停止  
  
        System.out.println("所有属性描述:");  
        PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();// 获取所有的属性描述  
        for (PropertyDescriptor propertyDescriptor: pds) {  
            System.out.println(propertyDescriptor.getName());  
        }  
        System.out.println("所有方法描述:");  
        for (MethodDescriptor methodDescriptor: beanInfo.getMethodDescriptors()) {  
            System.out.println(methodDescriptor.getName());  //获取到方法的名字
//            Method method = methodDescriptor.getMethod();   //获取到方法,如果需要使用再里面反射方法invake
        }  
    }  
}  

八:



你可能感兴趣的:(Java)