??xml version="1.0" encoding="utf-8" standalone="yes"?>天堂а在线中文在线无限看推荐 ,在线观看国产福利视频,久久久久高潮毛片免费全部播放http://www.aygfsteel.com/Reg/category/45436.htmlzh-cnThu, 22 Dec 2011 15:25:50 GMTThu, 22 Dec 2011 15:25:50 GMT60Dom4jFactory(d包含命名I间的XMLQ支持节点读取不完整Q?<font color=red>d使用实例</font>http://www.aygfsteel.com/Reg/archive/2011/12/14/366351.html艾L艾LWed, 14 Dec 2011 08:39:00 GMThttp://www.aygfsteel.com/Reg/archive/2011/12/14/366351.htmlhttp://www.aygfsteel.com/Reg/comments/366351.htmlhttp://www.aygfsteel.com/Reg/archive/2011/12/14/366351.html#Feedback2http://www.aygfsteel.com/Reg/comments/commentRss/366351.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/366351.htmlimport java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

/**
 * d有命名空间的XMLQ支持节点读取不完整Q?br />  * 
@author Ai Bo
 * 
@version 1.3.1 Date 2011-12-14
 
*/

public class Dom4jFactory {
    
private SAXReader reader = new SAXReader();
    
private Document document;
    
private static Element root;
    
private static Map<String, String> xmlMap = new HashMap<String, String>();

    
public Dom4jFactory(String path) {
        
super();
        
try {
            document 
= reader.read(path);
            root 
= document.getRootElement();
            String defaultNamespace 
= root.getNamespaceURI();
            xmlMap.put(
"default", defaultNamespace);
        }
 catch (DocumentException e) {
            e.printStackTrace();
        }

    }


    
public static List<?> getSelectNodes(String arg0) {
        XPath selector 
= root.createXPath("//default:" + arg0);
        selector.setNamespaceURIs(xmlMap);
        
return selector.selectNodes(root);
    }

    
    @SuppressWarnings(
"unchecked")
    
public <T> T getSelectObject(String arg0){
        List
<?> selectNodes = getSelectNodes(arg0);
        
if(selectNodes.size()==1){
            
return (T) selectNodes.get(0);
        }
else{
            
return null;
        }

    }

}

 XML文g:

<?xml version="1.0" encoding="UTF-8"?>
<inputs xmlns="http://input.abio.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://input.abio.com.cn http://www.abio.com.cn/sproinput.xsd">
   
<columns>2</columns>
   
<input id="id"  datatype="String" minlen="1" maxlen="32" casetype="U" width="40" name_zh="数据代码" inputtype="text" editable="2" gridwidth="3"></input>
   
<input id="organNo"  datatype="integer" nullable="false" minlen="1" maxlen="20" casetype="U" width="40" name_zh="机构~号" inputtype="text" editable="2"></input>
   
<input id="organName"  datatype="String" nullable="false" minlen="1" maxlen="20" casetype="U" width="40" name_zh="机构名称" inputtype="text" editable="2"></input>
   
<input id="pOrganNo"  datatype="String" nullable="false" minlen="1" maxlen="20" casetype="U" width="40" name_zh="父机构编? inputtype="text" editable="2"></input>
   
<input id="effTime"  datatype="Date" validator="Date" nullable="false" format="yyyy-MM-dd" minlen="8" maxlen="8" casetype="U" width="40" name_zh="有效日期" inputtype="date" editable="2"></input>
   
<input id="createUser"  datatype="String" minlen="1" maxlen="20" casetype="U" width="40" name_zh="创徏? inputtype="text" editable="2"></input>
   
<input id="createTime"  datatype="Date" minlen="10" maxlen="20" casetype="U" width="40" name_zh="创徏日期" editable="2" inputtype="text"></input>
   
<input id="updateUser"  datatype="String"  minlen="1" maxlen="20" casetype="U" width="40" name_zh="更新? inputtype="text" editable="2"></input>
   
<input id="updateTime"  datatype="Date" minlen="10" maxlen="20" casetype="U" width="40" name_zh="更新日期" editable="2" inputtype="text"></input>
</inputs>

dXML单个节点Qinputs下的columns节点Q?

Dom4jFactory df = new Dom4jFactory("c:\\test.xml");
        DefaultElement columnsitem 
= df.getSelectObject("columns");

dXML inputs节点下所有的input节点Q?/p>

Dom4jFactory df = new Dom4jFactory("c:\\test.xml");
            List
<DefaultElement> inputNodes = df.getSelectNodes("input");




 



艾L 2011-12-14 16:39 发表评论
]]>
[转]Java api 全集 【API JDK1.6中文版?/title><link>http://www.aygfsteel.com/Reg/archive/2011/03/15/346310.html</link><dc:creator>艾L</dc:creator><author>艾L</author><pubDate>Tue, 15 Mar 2011 06:37:00 GMT</pubDate><guid>http://www.aygfsteel.com/Reg/archive/2011/03/15/346310.html</guid><wfw:comment>http://www.aygfsteel.com/Reg/comments/346310.html</wfw:comment><comments>http://www.aygfsteel.com/Reg/archive/2011/03/15/346310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Reg/comments/commentRss/346310.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Reg/services/trackbacks/346310.html</trackback:ping><description><![CDATA[J2SE DK <span style="color: rgb(0,0,204)">&</span> API下蝲<br /> -------------------------<br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>j2se<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>3<span style="color: rgb(0,0,204)">/</span>download<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(0,0,255)">html</span><br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>j2se<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>4<span style="color: rgb(0,0,204)">.</span>2<span style="color: rgb(0,0,204)">/</span>download<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(0,0,255)">html</span><br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>javase<span style="color: rgb(0,0,204)">/</span>downloads<span style="color: rgb(0,0,204)">/</span>index_jdk5<span style="color: rgb(0,0,204)">.</span>jsp<br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>javase<span style="color: rgb(0,0,204)">/</span>downloads<span style="color: rgb(0,0,204)">/</span>index<span style="color: rgb(0,0,204)">.</span>jsp<br /> J2EE DK <span style="color: rgb(0,0,204)">&</span> API下蝲 <br /> -------------------------<br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>j2ee<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>3<span style="color: rgb(0,0,204)">/</span>index<span style="color: rgb(0,0,204)">.</span>jsp<br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>j2ee<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>3<span style="color: rgb(0,0,204)">/</span>download<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(0,0,255)">html</span><br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>j2ee<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>4<span style="color: rgb(0,0,204)">/</span>index<span style="color: rgb(0,0,204)">.</span>jsp<br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>j2ee<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>4<span style="color: rgb(0,0,204)">/</span>download<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(0,0,255)">html</span><br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>javaee<span style="color: rgb(0,0,204)">/</span>downloads<span style="color: rgb(0,0,204)">/</span>index<span style="color: rgb(0,0,204)">.</span>jsp<br /> JDK1<span style="color: rgb(0,0,204)">.</span>6API中文版(全)<br /> -------------------------<br /> <span style="color: rgb(0,0,204)">*</span> <span style="color: rgb(0,0,255)">HTML</span> 格式<span style="color: rgb(0,0,204)">(</span>在线英文<span style="color: rgb(0,0,204)">)</span> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>javase<span style="color: rgb(0,0,204)">/</span>6<span style="color: rgb(0,0,204)">/</span>docs<span style="color: rgb(0,0,204)">/</span><br /> <span style="color: rgb(0,0,204)">*</span> <span style="color: rgb(0,0,255)">HTML</span> 格式<span style="color: rgb(0,0,204)">(</span>在线中文<span style="color: rgb(0,0,204)">)</span> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>download<span style="color: rgb(0,0,204)">.</span>java<span style="color: rgb(0,0,204)">.</span>net<span style="color: rgb(0,0,204)">/</span>jdk<span style="color: rgb(0,0,204)">/</span>jdk-api-localizations<span style="color: rgb(0,0,204)">/</span>jdk-api-zh-cn<span style="color: rgb(0,0,204)">/</span>publish<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>6<span style="color: rgb(0,0,204)">.</span>0<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,255)">html</span><span style="color: rgb(0,0,204)">/</span>zh_CN<span style="color: rgb(0,0,204)">/</span>api<span style="color: rgb(0,0,204)">/</span>index<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(0,0,255)">html</span><br /> <span style="color: rgb(0,0,204)">*</span> zip 格式<span style="color: rgb(0,0,204)">(</span>中文<span style="color: rgb(0,0,204)">)</span> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>download<span style="color: rgb(0,0,204)">.</span>java<span style="color: rgb(0,0,204)">.</span>net<span style="color: rgb(0,0,204)">/</span>jdk<span style="color: rgb(0,0,204)">/</span>jdk-api-localizations<span style="color: rgb(0,0,204)">/</span>jdk-api-zh-cn<span style="color: rgb(0,0,204)">/</span>publish<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>6<span style="color: rgb(0,0,204)">.</span>0<span style="color: rgb(0,0,204)">/</span>html_zh_CN<span style="color: rgb(0,0,204)">.</span>zip<br /> <span style="color: rgb(0,0,204)">*</span> CHM 格式<span style="color: rgb(0,0,204)">(</span>中文<span style="color: rgb(0,0,204)">)</span> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>download<span style="color: rgb(0,0,204)">.</span>java<span style="color: rgb(0,0,204)">.</span>net<span style="color: rgb(0,0,204)">/</span>jdk<span style="color: rgb(0,0,204)">/</span>jdk-api-localizations<span style="color: rgb(0,0,204)">/</span>jdk-api-zh-cn<span style="color: rgb(0,0,204)">/</span>publish<span style="color: rgb(0,0,204)">/</span>1<span style="color: rgb(0,0,204)">.</span>6<span style="color: rgb(0,0,204)">.</span>0<span style="color: rgb(0,0,204)">/</span>chm<span style="color: rgb(0,0,204)">/</span>JDK_API_1_6_zh_CN<span style="color: rgb(0,0,204)">.</span>CHM <br /> JDK1<span style="color: rgb(0,0,204)">.</span>5API中文版(全)<br /> -------------------------<br /> <span style="color: rgb(0,0,204)">*</span> <span style="color: rgb(0,0,255)">HTML</span> 格式<span style="color: rgb(0,0,204)">(</span>在线英文<span style="color: rgb(0,0,204)">)</span> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>javase<span style="color: rgb(0,0,204)">/</span>5<span style="color: rgb(0,0,204)">/</span>docs<span style="color: rgb(0,0,204)">/</span><br /> <span style="color: rgb(0,0,204)">*</span> <span style="color: rgb(0,0,255)">HTML</span> 格式<span style="color: rgb(0,0,204)">(</span>在线中文<span style="color: rgb(0,0,204)">)</span> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>gceclub<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">.</span>cn<span style="color: rgb(0,0,204)">/</span>Java_Docs<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,255)">html</span><span style="color: rgb(0,0,204)">/</span>zh_CN<span style="color: rgb(0,0,204)">/</span>api<span style="color: rgb(0,0,204)">/</span>index<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(0,0,255)">html</span><br /> <span style="color: rgb(0,0,204)">*</span> zip 格式<span style="color: rgb(0,0,204)">(</span>中文<span style="color: rgb(0,0,204)">)</span> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>gceclub<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">.</span>cn<span style="color: rgb(0,0,204)">/</span>Java_Docs<span style="color: rgb(0,0,204)">/</span>html_zh_CN<span style="color: rgb(0,0,204)">.</span>zip<br /> <span style="color: rgb(0,0,204)">*</span> CHM 格式<span style="color: rgb(0,0,204)">(</span>中文<span style="color: rgb(0,0,204)">)</span> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>download<span style="color: rgb(0,0,204)">.</span>java<span style="color: rgb(0,0,204)">.</span>net<span style="color: rgb(0,0,204)">/</span>jdk<span style="color: rgb(0,0,204)">/</span>jdk-api-localizations<span style="color: rgb(0,0,204)">/</span>jdk-api-zh-cn<span style="color: rgb(0,0,204)">/</span>builds<span style="color: rgb(0,0,204)">/</span>JDK_API_1_5_zh_CN<span style="color: rgb(0,0,204)">.</span>CHM<br /> <br /> 相关|站<br /> -------------------------<br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>gceclub<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">.</span>cn<span style="color: rgb(0,0,204)">/</span><br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>developers<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>downloads<span style="color: rgb(0,0,204)">/</span><br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>javaee<span style="color: rgb(0,0,204)">/</span>downloads<span style="color: rgb(0,0,204)">/</span><br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>java<span style="color: rgb(0,0,204)">.</span>sun<span style="color: rgb(0,0,204)">.</span>com<span style="color: rgb(0,0,204)">/</span>javase<span style="color: rgb(0,0,204)">/</span>downloads<span style="color: rgb(0,0,204)">/</span><br /> http:<span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">/</span>www<span style="color: rgb(0,0,204)">.</span>netbeans<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(255,0,0)">info</span><span style="color: rgb(0,0,204)">/</span>downloads<span style="color: rgb(0,0,204)">/</span><br /> <img src ="http://www.aygfsteel.com/Reg/aggbug/346310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Reg/" target="_blank">艾L</a> 2011-03-15 14:37 <a href="http://www.aygfsteel.com/Reg/archive/2011/03/15/346310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 文g压羃http://www.aygfsteel.com/Reg/archive/2010/11/25/339033.html艾L艾LThu, 25 Nov 2010 08:07:00 GMThttp://www.aygfsteel.com/Reg/archive/2010/11/25/339033.htmlhttp://www.aygfsteel.com/Reg/comments/339033.htmlhttp://www.aygfsteel.com/Reg/archive/2010/11/25/339033.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/339033.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/339033.htmlpackage com.cn;  
  
import java.io.BufferedInputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.util.zip.CRC32;  
import java.util.zip.CheckedOutputStream;  
import java.util.zip.ZipEntry;  
import java.util.zip.ZipOutputStream;  
  
public class ZipCompressor {   
      
    
static final int BUFFER = 8192;  
  
    
private File zipFile;  
  
    
public ZipCompressor(String pathName) {   
            zipFile 
= new File(pathName);   
    }  
  
    
public void compress(String srcPathName) {   
        File file 
= new File(srcPathName);   
        
if (!file.exists())   
            
throw new RuntimeException(srcPathName + "不存在!");   
        
try {   
            FileOutputStream fileOutputStream 
= new FileOutputStream(zipFile);   
            CheckedOutputStream cos 
= new CheckedOutputStream(fileOutputStream,   
                    
new CRC32());   
            ZipOutputStream out 
= new ZipOutputStream(cos);   
            String basedir 
= "";   
            compress(file, out, basedir);   
            out.close();   
        } 
catch (Exception e) {   
            
throw new RuntimeException(e);   
        }   
    }  
  
    
private void compress(File file, ZipOutputStream out, String basedir) {   
        
/* 判断是目录还是文?nbsp;*/   
        
if (file.isDirectory()) {   
            System.out.println(
"压羃Q?/span>" + basedir + file.getName());   
            
this.compressDirectory(file, out, basedir);   
        } 
else {   
            System.out.println(
"压羃Q?/span>" + basedir + file.getName());   
            
this.compressFile(file, out, basedir);   
        }   
    }  
  
    
/** 压羃一个目?nbsp;*/   
    
private void compressDirectory(File dir, ZipOutputStream out, String basedir) {   
        
if (!dir.exists())   
            
return;  
  
        File[] files 
= dir.listFiles();   
        
for (int i = 0; i < files.length; i++) {   
            
/* 递归 */   
            compress(files[i], out, basedir 
+ dir.getName() + "/");   
        }   
    }  
  
    
/** 压羃一个文?nbsp;*/   
    
private void compressFile(File file, ZipOutputStream out, String basedir) {   
        
if (!file.exists()) {   
            
return;   
        }   
        
try {   
            BufferedInputStream bis 
= new BufferedInputStream(   
                    
new FileInputStream(file));   
            ZipEntry entry 
= new ZipEntry(basedir + file.getName());   
            out.putNextEntry(entry);   
            
int count;   
            
byte data[] = new byte[BUFFER];   
            
while ((count = bis.read(data, 0, BUFFER)) != -1) {   
                out.write(data, 
0, count);   
            }   
            bis.close();   
        } 
catch (Exception e) {   
            
throw new RuntimeException(e);   
        }   
    }   
      
    
/**測試是否可以壓縮*/  
    
public static void main(String[] args) {   
        ZipCompressor zc 
= new ZipCompressor("E:\\szhzip.zip");   
        zc.compress(
"E:\\test");   
        System.out.println(
"OK.");  
    }  
}   


艾L 2010-11-25 16:07 发表评论
]]>
JAVA中LISt遍历时如何r(sh)emove元素http://www.aygfsteel.com/Reg/archive/2010/11/15/338087.html艾L艾LMon, 15 Nov 2010 05:56:00 GMThttp://www.aygfsteel.com/Reg/archive/2010/11/15/338087.htmlhttp://www.aygfsteel.com/Reg/comments/338087.htmlhttp://www.aygfsteel.com/Reg/archive/2010/11/15/338087.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/338087.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/338087.htmlimport java.util.*;

  
public class object {

  
public static void main(String[] args) {

  String str1 
= new String("abcde");

  String str2 
= new String("abcde");

  String str3 
= new String("abcde");

  String str4 
= new String("abcde");

  String str5 
= new String("abcde");

  List list 
= new ArrayList();

  list.add(str1);

  list.add(str2);

  list.add(str3);

  list.add(str4);

  list.add(str5);

  System.out.println(
"list.size()=" + list.size());

  
for (int i = 0; i < list.size(); i++) {

  
if (((String) list.get(i)).startsWith("abcde")) {

  list.remove(i);

  }

  q行l果不是Q?br />
  list.size()
=5

  after remove:list.size()
=0

  居然是:(x)

  list.size()
=5

  after remove:list.size()
=2

  原因QList每remove掉一个元素以后,后面的元素都?x)向前移动,此时如果执行i
=i+1Q则刚刚U过来的元素没有被读取?br />
  解决Ҏ(gu)Q?br />
  
1.倒过来遍历list

  
for (int i = list.size()-1; i > =0; i--) {

  
if (((String) list.get(i)).startsWith("abcde")) {

  list.remove(i);

  }

  }

  
2.每移除一个元素以后再把iUd?br />
  
for (int i = 0; i < list.size(); i++) {

  
if (((String) list.get(i)).startsWith("abcde")) {

  list.remove(i);

  i
=i-1;

  }

  }

  
3.使用iterator.remove()Ҏ(gu)删除

  
for (Iterator it = list.iterator(); it.hasNext();) {

  String str 
= (String)it.next();

  
if (str.equals("chengang")){

  it.remove();

  }

  }

  }

  System.out.println(
"after remove:list.size()=" + list.size());

  }

  }


艾L 2010-11-15 13:56 发表评论
]]>
java生成上传囄的羃略图http://www.aygfsteel.com/Reg/archive/2010/08/29/330186.html艾L艾LSun, 29 Aug 2010 08:32:00 GMThttp://www.aygfsteel.com/Reg/archive/2010/08/29/330186.htmlhttp://www.aygfsteel.com/Reg/comments/330186.htmlhttp://www.aygfsteel.com/Reg/archive/2010/08/29/330186.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/330186.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/330186.html1.//pizza   
2.package com;   
3.  
4.import java.io.FileOutputStream;   
5.  
6.  
7.  
8.public class ToImg {   
9.    public static void main(String[] args) throws Exception {   
10.        toSmaillImg("untitled.bmp","thumb.bmp");   
11.    }   
12.       
13.    public static void toSmaillImg(String filePath,String thumbPath) throws Exception{   
14.        String newurl =thumbPath;   
15.        java.awt.Image bigJpg = javax.imageio.ImageIO.read(new java.io.File(filePath));   
16.        float tagsize = 100;   
17.        int old_w = bigJpg.getWidth(null);   
18.        int old_h = bigJpg.getHeight(null);      
19.        int new_w = 0;   
20.        int new_h = 0;   
21.        float tempdouble;    
22.        tempdouble = old_w > old_h ? old_w/tagsize : old_h/tagsize;   
23.        new_w = Math.round(old_w/tempdouble);   
24.        new_h = Math.round(old_h/tempdouble);   
25.        java.awt.image.BufferedImage tag = new java.awt.image.BufferedImage(new_w,new_h,java.awt.image.BufferedImage.TYPE_INT_RGB);   
26.        tag.getGraphics().drawImage(bigJpg,0,0,new_w,new_h,null);   
27.        FileOutputStream newimage = new FileOutputStream(newurl);   
28.        com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(newimage);          
29.        encoder.encode(tag);   
30.        newimage.close();   
31.    }   
32.}  

艾L 2010-08-29 16:32 发表评论
]]>
JSP上传囄q自动生成羃略图http://www.aygfsteel.com/Reg/archive/2010/08/29/330185.html艾L艾LSun, 29 Aug 2010 08:25:00 GMThttp://www.aygfsteel.com/Reg/archive/2010/08/29/330185.htmlhttp://www.aygfsteel.com/Reg/comments/330185.htmlhttp://www.aygfsteel.com/Reg/archive/2010/08/29/330185.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/330185.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/330185.htmlJSP上传囄q生成羃略图

本例子用了jspsmartlgq行上传Q这里可以免费下载该lgwww.jspsmart.com
下蝲解压后,jar包复制到 \WEB
-INF\lib 目录后重启服务器Qjspsmart卛_正常使用?br />
1、uploadimage.jsp

<%@ page contentType="text/html;charset=gb2312" language="java" import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,java.sql.*,com.jspsmart.upload.*,java.util.*,cn.oof.database.*,cn.oof.house.*"%>
<%
SmartUpload mySmartUpload 
=new SmartUpload();
long file_size_max=4000000;
String fileName2
="",ext="",testvar="";
String url
="uploadfile/images/";      //应保证在根目录中有此目录的存?br /> //初始?/span>
mySmartUpload.initialize(pageContext);
//只允怸载此cL?/span>
try {
 mySmartUpload.setAllowedFilesList(
"jpg,gif");
//上蝲文g 
 mySmartUpload.upload();
catch (Exception e){
%>
  
<SCRIPT language=javascript>
  alert(
"只允怸?jpg?gifcd囄文g");
  window.location
='upfile.jsp';
  
</script>
<%
}
try{

    com.jspsmart.upload.File myFile 
= mySmartUpload.getFiles().getFile(0);
    
if (myFile.isMissing()){%>
   
<SCRIPT language=javascript>
   alert(
"请先选择要上传的文g");
   window.location
='upfile.jsp';
   
</script>
    
<%}
    
else{
      
//String myFileName=myFile.getFileName(); //取得上蝲的文件的文g?/span>
   ext= myFile.getFileExt();      //取得后缀?/span>
   int file_size=myFile.getSize();     //取得文g的大?nbsp; 
   String saveurl="";
   
if(file_size<file_size_max){
    
//更改文g名,取得当前上传旉的毫U数?/span>
    Calendar calendar = Calendar.getInstance();
    String filename 
= String.valueOf(calendar.getTimeInMillis()); 
    saveurl
=request.getRealPath("/")+url;
    saveurl
+=filename+"."+ext;          //保存路径
    myFile.saveAs(saveurl,mySmartUpload.SAVE_PHYSICAL);
    
//out.print(filename);
//-----------------------上传完成Q开始生成羃略图-------------------------    
    java.io.File file = new java.io.File(saveurl);        //d刚才上传的文?/span>
    String newurl=request.getRealPath("/")+url+filename+"_min."+ext;  //新的~略图保存地址
    Image src = javax.imageio.ImageIO.read(file);                     //构造Image对象
    float tagsize=200;
    
int old_w=src.getWidth(null);                                     //得到源图?/span>
    int old_h=src.getHeight(null);   
    
int new_w=0;
    
int new_h=0;                            //得到源图?/span>
    int tempsize;
    
float tempdouble; 
    
if(old_w>old_h){
     tempdouble
=old_w/tagsize;
    }
else{
     tempdouble
=old_h/tagsize;
    }
    new_w
=Math.round(old_w/tempdouble);
    new_h
=Math.round(old_h/tempdouble);//计算新图长宽
    BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
    tag.getGraphics().drawImage(src,
0,0,new_w,new_h,null);       //l制~小后的?/span>
    FileOutputStream newimage=new FileOutputStream(newurl);          //输出到文件流
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);       
    encoder.encode(tag);                                               
//qJPEG~码
     newimage.close();    

   }
   
else{
    out.print(
"<SCRIPT language='javascript'>");
    out.print(
"alert('上传文g大小不能过"+(file_size_max/1000)+"K');");
    out.print(
"window.location='upfile.jsp;'");
    out.print(
"</SCRIPT>");
   }
  }
}
catch (Exception e){

e.toString();

}
%> 

2 upload.htm
<html>
<head>
<title>请选择上传的图?/span></title>
</head> 
<body>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  
<tr>
    
<td height="45" align="center" valign="middle"><form action="uploadimage.jsp" method="post" enctype="multipart/form-data" name="form1">
请选择上传的图?br />     
<input type="file" name="file">
<input type="submit" name="Submit" value="上传">
    
</form></td>
  
</tr>
</table>
</body>
</html>

来源:http://www.moon-soft.com/doc/49683.htm

艾L 2010-08-29 16:25 发表评论
]]>
JAVA日期旉加减q算代码http://www.aygfsteel.com/Reg/archive/2010/07/23/326969.html艾L艾LFri, 23 Jul 2010 10:30:00 GMThttp://www.aygfsteel.com/Reg/archive/2010/07/23/326969.htmlhttp://www.aygfsteel.com/Reg/comments/326969.htmlhttp://www.aygfsteel.com/Reg/archive/2010/07/23/326969.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/326969.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/326969.html1.用java.util.Calender来实?br />
    Calendar calendar
=Calendar.getInstance();   
  calendar.setTime(
new Date());
  System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
//今天的日?nbsp;
  calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+1);//让日期加1   
  System.out.println(calendar.get(Calendar.DATE));//?之后的日期Top

2.用java.text.SimpleDateFormat和java.util.Date来实?br />
    Date d
=new Date();   
 SimpleDateFormat df
=new SimpleDateFormat("yyyy-MM-dd");   
 System.out.println(
"今天的日期:(x)"+df.format(d));   
 System.out.println(
"两天前的日期Q?/span>" + df.format(new Date(d.getTime() - 2 * 24 * 60 * 60 * 1000)));   
 System.out.println(
"三天后的日期Q?/span>" + df.format(new Date(d.getTime() + 3 * 24 * 60 * 60 * 1000)));

艾L 2010-07-23 18:30 发表评论
]]>
java U学记数法数转ؓ(f)其他数值类?/title><link>http://www.aygfsteel.com/Reg/archive/2010/07/22/326860.html</link><dc:creator>艾L</dc:creator><author>艾L</author><pubDate>Thu, 22 Jul 2010 10:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/Reg/archive/2010/07/22/326860.html</guid><wfw:comment>http://www.aygfsteel.com/Reg/comments/326860.html</wfw:comment><comments>http://www.aygfsteel.com/Reg/archive/2010/07/22/326860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Reg/comments/commentRss/326860.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Reg/services/trackbacks/326860.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">double</span><span style="color: #000000"> a </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1.1234546789E6</span><span style="color: #000000">;<br />   java.text.DecimalFormat df </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> java.text.DecimalFormat(</span><span style="color: #000000">"</span><span style="color: #000000">00.00</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">""00.00"数点后面的0的个数表C小数点的个?/span><span style="color: #008000"><br /> </span><span style="color: #000000">  String b </span><span style="color: #000000">=</span><span style="color: #000000"> df.format(a);<br /> <br />  <br /> <br /> </span><span style="color: #000000">------</span><span style="color: #000000">打印l果</span><span style="color: #000000">-----------------</span><span style="color: #000000"><br /> <br /> </span><span style="color: #000000">1123454.6789</span><span style="color: #000000"><br /> <br /> </span></div> <img src ="http://www.aygfsteel.com/Reg/aggbug/326860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Reg/" target="_blank">艾L</a> 2010-07-22 18:26 <a href="http://www.aygfsteel.com/Reg/archive/2010/07/22/326860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java日期循环QJava获取当月的第一天和最后一?/title><link>http://www.aygfsteel.com/Reg/archive/2010/07/20/326675.html</link><dc:creator>艾L</dc:creator><author>艾L</author><pubDate>Tue, 20 Jul 2010 13:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/Reg/archive/2010/07/20/326675.html</guid><wfw:comment>http://www.aygfsteel.com/Reg/comments/326675.html</wfw:comment><comments>http://www.aygfsteel.com/Reg/archive/2010/07/20/326675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Reg/comments/commentRss/326675.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Reg/services/trackbacks/326675.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">1</span><span style="color: #000000">、Java日期循环<br /> <br /> SimpleDateFormat formater </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy-MM-dd</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <br /> String   dateStr1</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">2008-3-16</span><span style="color: #000000">"</span><span style="color: #000000">; <br /> <br /> String      dateStr2</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">2008-3-24</span><span style="color: #000000">"</span><span style="color: #000000">; <br /> <br /> java.util.Date dateBegin</span><span style="color: #000000">=</span><span style="color: #000000">formater.parse(dateStr1);<br /> <br /> java.util.Date dateEnd</span><span style="color: #000000">=</span><span style="color: #000000">formater.parse(dateStr2);             <br /> <br /> Calendar   ca</span><span style="color: #000000">=</span><span style="color: #000000">Calendar.getInstance(); <br /> <br /> </span><span style="color: #0000ff">while</span><span style="color: #000000">(dateBegin.compareTo(dateEnd)</span><span style="color: #000000"><=</span><span style="color: #000000">0</span><span style="color: #000000">){             <br /> <br />              ca.setTime(dateBegin);   <br /> <br />               ca.add(ca.DATE,</span><span style="color: #000000">1</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">把dateBegin加上1天然后重新赋值给date1   </span><span style="color: #008000"><br /> </span><span style="color: #000000"><br />               dateBegin</span><span style="color: #000000">=</span><span style="color: #000000">ca.getTime();       <br /> <br />        }<br /> <br /> </span><span style="color: #000000">2</span><span style="color: #000000">、Java获取当月的第一天和最后一?br /> <br /> Calendar cal </span><span style="color: #000000">=</span><span style="color: #000000"> Calendar.getInstance(); <br /> <br /> SimpleDateFormat datef</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000"> SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy-MM-dd</span><span style="color: #000000">"</span><span style="color: #000000">);<br />              </span><span style="color: #008000">//</span><span style="color: #008000">当前月的最后一?nbsp;  </span><span style="color: #008000"><br /> </span><span style="color: #000000">             cal.set( Calendar.DATE, </span><span style="color: #000000">1</span><span style="color: #000000"> );<br />              cal.roll(Calendar.DATE, </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000"> );<br />              Date endTime</span><span style="color: #000000">=</span><span style="color: #000000">cal.getTime();<br />              String endTime1</span><span style="color: #000000">=</span><span style="color: #000000">datef.format(endTime)</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000"> 23:59:59</span><span style="color: #000000">"</span><span style="color: #000000">;<br />               </span><span style="color: #008000">//</span><span style="color: #008000">当前月的W一?nbsp;         </span><span style="color: #008000"><br /> </span><span style="color: #000000">             cal.set(GregorianCalendar.DAY_OF_MONTH, </span><span style="color: #000000">1</span><span style="color: #000000">); <br />               Date beginTime</span><span style="color: #000000">=</span><span style="color: #000000">cal.getTime();<br />              String beginTime1</span><span style="color: #000000">=</span><span style="color: #000000">datef.format(beginTime)</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000"> 00:00:00</span><span style="color: #000000">"</span><span style="color: #000000">;<br /> </span></div> <img src ="http://www.aygfsteel.com/Reg/aggbug/326675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Reg/" target="_blank">艾L</a> 2010-07-20 21:52 <a href="http://www.aygfsteel.com/Reg/archive/2010/07/20/326675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title><font color=red>Java|络socket~程详解</font>http://www.aygfsteel.com/Reg/archive/2010/07/17/326392.html艾L艾LSat, 17 Jul 2010 05:39:00 GMThttp://www.aygfsteel.com/Reg/archive/2010/07/17/326392.htmlhttp://www.aygfsteel.com/Reg/comments/326392.htmlhttp://www.aygfsteel.com/Reg/archive/2010/07/17/326392.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/326392.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/326392.html阅读全文

艾L 2010-07-17 13:39 发表评论
]]>
水帐号生成自定义策?/title><link>http://www.aygfsteel.com/Reg/archive/2010/07/09/325635.html</link><dc:creator>艾L</dc:creator><author>艾L</author><pubDate>Fri, 09 Jul 2010 04:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/Reg/archive/2010/07/09/325635.html</guid><description><![CDATA[     摘要: USE [fa1] GO /****** 对象:  Table [dbo].[SYS_SERIAL_NUMBER]    脚本日期: 07/09/2010 12:45:23 ******/ SET ANSI_NULLS ON GO SET ...  <a href='http://www.aygfsteel.com/Reg/archive/2010/07/09/325635.html'>阅读全文</a><img src ="http://www.aygfsteel.com/Reg/aggbug/325635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Reg/" target="_blank">艾L</a> 2010-07-09 12:52 <a href="http://www.aygfsteel.com/Reg/archive/2010/07/09/325635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Calendar获取q月日时分秒毫秒http://www.aygfsteel.com/Reg/archive/2009/11/20/303042.html艾L艾LFri, 20 Nov 2009 05:46:00 GMThttp://www.aygfsteel.com/Reg/archive/2009/11/20/303042.htmlhttp://www.aygfsteel.com/Reg/comments/303042.htmlhttp://www.aygfsteel.com/Reg/archive/2009/11/20/303042.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/303042.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/303042.html
    开始用new Date()试,q用通过date.getMonth(),和date.getDay()获取,不过后来发现q两个访求是jdk1.1版本?现在已经不用?而且l果也不正确.
int month = (date.get(Calendar.MONTH))+1;
        int day = date.get(Calendar.DAY_OF_MONTH);

获取当前的月份和日期

试了一?果然正确

后来查看java doc文档,MONTH字段解释如下

Field number for get and set indicating the month. This is a calendar-specific value. The first month of the year is JANUARY which is 0; the last depends on the number of months in a year.

q个字段的值只是说明get()的属性字D?来获取month?/p>

 

以下取其?

Calendar CD = Calendar.getInstance();
int YY = CD.get(Calendar.YEAR) ;
int MM = CD.get(Calendar.MONTH)+1;
int DD = CD.get(Calendar.DATE);
int HH = CD.get(Calendar.HOUR);
int NN = CD.get(Calendar.MINUTE);
int SS = CD.get(Calendar.SECOND);
int MI = CD.get(Calendar.MILLISECOND);

Calendar cal = Calendar.getInstance();

        //当前q?br />         int year = cal.get(Calendar.YEAR);
        //当前?br />         int month = (cal.get(Calendar.MONTH))+1;
        //当前月的W几天:(x)卛_前日
        int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
        //当前Ӟ(x)HOUR_OF_DAY-24时ӞHOUR-12时?br />         int hour = cal.get(Calendar.HOUR_OF_DAY);
        //当前?br />         int minute = cal.get(Calendar.MINUTE);
        //当前U?br />         int second = cal.get(Calendar.SECOND);
        //0-上午Q?-下午
        int ampm = cal.get(Calendar.AM_PM);
        //当前q的W几?br />         int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);
        //当前月的W几?br />         int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);
        //当前q的W几?br />         int day_of_year = cal.get(Calendar.DAY_OF_YEAR);



艾L 2009-11-20 13:46 发表评论
]]>
Java随机数详?lt;font color=red>新手晋</font>http://www.aygfsteel.com/Reg/archive/2009/11/20/303040.html艾L艾LFri, 20 Nov 2009 05:32:00 GMThttp://www.aygfsteel.com/Reg/archive/2009/11/20/303040.htmlhttp://www.aygfsteel.com/Reg/comments/303040.htmlhttp://www.aygfsteel.com/Reg/archive/2009/11/20/303040.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/303040.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/303040.html
Ҏ(gu)1
(数据cd)(最?Math.random()*(最大?最?1))
?
(int)(1+Math.random()*(10-1+1))
??0的int型随?/font>
Ҏ(gu)2
获得随机?br /> for (int i=0;i<30;i++)
{System.out.println((int)(1+Math.random()*10));}
(int)(1+Math.random()*10)
通过java.Math包的randomҎ(gu)得到1-10的int随机?br /> 公式?最?--最大|整数Q的随机?br /> Q类型)最?Math.random()*最大?/font>
Ҏ(gu)3
Random ra =new Random();
for (int i=0;i<30;i++)
{System.out.println(ra.nextInt(10)+1);}
通过java.util包中的RandomcȝnextIntҎ(gu)来得?-10的int随机?/font>

java产生随机数的几种方式
一.在j2se里我们可以用Math.random()Ҏ(gu)来生一个随机数Q这个生的随机数是0-1之间的一个doubleQ我们可以把他乘以一定的敎ͼ比如说乘?00Q他是?00以内的随机,q个在j2me中没有?/p>

?在java.utilq个包里面提供了一个Random的类Q我们可以新Z个Random的对象来产生随机敎ͼ他可以生随机整数、随机float、随机doubleQ随机longQ这个也是我们在j2me的程序里l常用的一个取随机数的Ҏ(gu)?/p>

?在我们的SystemcM有一个currentTimeMillis()Ҏ(gu)Q这个方法返回一个从1970q?????U到目前的一个毫U数Q返回类型是longQ我们可以拿他作Z个随机数Q我们可以拿他对一些数取模Q就可以把他限制在一个范围之内啦

其实在Random的默认构造方法里也是使用上面W三U方法进行随机数的生的


对于Ҏ(gu)二中的RandomcL以下说明Q?/p>

java.util.RandomcL两种方式构徏方式Q带U子和不带种?/p>

不带U子Q?
此种方式会(x)q回随机的数字,每次q行l果不一?/p>

public class RandomTest {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
for(int i=0;i<10;i++){
    System.out.println(r.nextInt());
}

}
带种子:(x)
此种方式Q无论程序运行多次Q返回结果都是一L(fng)

public static void main(String[] args) {
java.util.Random r=new java.util.Random(10);
for(int i=0;i<10;i++){
    System.out.println(r.nextInt());
}
}

两种方式的差别在?/p>

(1) 首先h开Java DocQ我们会(x)看到Randomcȝ说明Q?/p>

此类的实例用于生成伪随机数流Q此cM?48 位的U子Q该U子可以使用U性同余公式对其进行修改(请参?Donald Knuth 的《The Art of Computer Programming, Volume 2》,W?3.2.1 节)?

如果用相同的U子创徏两个 Random 实例Q则Ҏ(gu)个实例进行相同的Ҏ(gu)调用序列Q它们将生成q返回相同的数字序列。ؓ(f)了保证实现这U特性,我们为类Random指定了特定的法。ؓ(f)?Java 代码的完全可UL性,Java 实现必须让类 Random 使用此处所C的所有算法。但是允?Random cȝ子类使用其他法Q只要其W合所有方法的常规协定卛_?

Java Doc对Randomcdl解释得非常明白Q我们的试也验证了q一炏V?/p>

(2) 如果没有提供U子敎ͼRandom实例的种子数是当前旉的毫U数Q可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码Q我们可以非常明地看到q一炏V?/p>

/**
* Creates a new random number generator. Its seed is initialized to
* a value based on the current time:
* Random() { this(System.currentTimeMillis()); }java.lang.System#currentTimeMillis()
*/
public Random() { this(System.currentTimeMillis()); }


另外Q?

random对象的nextInt(),nextInt(int n)Ҏ(gu)的说明:(x)

int nextInt()
    q回下一个伪随机敎ͼ它是此随机数生成器的序列中均匀分布?int 倹{?
int nextInt(int n)
    q回一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、在 0Q包括)和指定|不包括)之间均匀分布?int倹{?nbsp; 

Java随机数ȝ

  随机数在实际中用很q泛Q比如要随即生成一个固定长度的字符丌Ӏ数字。或者随即生成一个不定长度的数字、或者进行一个模拟的随机选择{等。Java提供了最基本的工P可以帮助开发者来实现q一切?/p>

  一、Java随机数的产生方式

  在Java中,随机数的概念从广义上,有三U?/p>

  1、通过System.currentTimeMillis()来获取一个当前时间毫U数的long型数字?/p>

  2、通过Math.random()q回一??之间的double倹{?/p>

  3、通过RandomcL产生一个随机数Q这个是专业的Random工具c,功能强大?/p>

  二、RandomcAPI说明

  1、Java API说明

  Randomcȝ实例用于生成伪随机数。此cM?48 位的U子Q用线性同余公式对其进行修?请参?Donald Knuth 的《The Art of Computer ProgrammingQ?Volume 2》,W?3.2.1 ??/p>

  如果用相同的U子创徏两个 Random 实例Q则Ҏ(gu)个实例进行相同的Ҏ(gu)调用序列Q它们将生成q返回相同的数字序列。ؓ(f)了保证属性的实现Qؓ(f)c?Random 指定了特定的法?/p>

  很多应用E序?x)发?Math cM?random Ҏ(gu)更易于用?/p>

  2、方法摘?/p>

  Random()

  创徏一个新的随机数生成器?/p>

  Random(long seed)

  使用单个 long U子创徏一个新随机数生成器Q?public Random(long seed) { setSeed(seed); } next Ҏ(gu)使用它来保存随机数生成器的状态?/p>

  protected int next(int bits)

  生成下一个伪随机数?/p>

  boolean nextBoolean()

  q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、均匀分布?boolean 倹{?/p>

  void nextBytes(byte[] bytes)

  生成随机字节q将其置于用h供的字节数组中?/p>

  double nextDouble()

  q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、在 0.0 ?1.0之间均匀分布?double 倹{?/p>

  float nextFloat()

  q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、在 0.0 ?1.0 之间均匀分布?float 倹{?/p>

  double nextGaussian()

  q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、呈高斯(“正常?#8221;)分布?double |其^均值是 0.0Q标准偏差是 1.0?/p>

  int nextInt()

  q回下一个伪随机敎ͼ它是此随机数生成器的序列中均匀分布?int 倹{?/p>

  int nextInt(int n)

  q回一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、在 0(包括)和指定?不包?之间均匀分布?int倹{?/p>

  long nextLong()

  q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、均匀分布?long 倹{?/p>

  void setSeed(long seed)

  使用单个 long U子讄此随机数生成器的U子?/p>

  三、RandomcM用说?/p>

  1、带U子与不带种子的区别RandomcM用的Ҏ(gu)是策略分带种子和不带U子的Random的实例?/p>

  通俗_(d)两者的区别是:(x)带种子的Q每ơ运行生成的l果都是一L(fng)?/p>

  不带U子的,每次q行生成的都是随机的Q没有规律可a?/p>

  2、创Z带种子的Random对象

  Random random = new Random();

  3、创Z带种子的Random对象有两U方法:(x)

  1) Random random = new Random(555L);

  2) Random random = new Random();random.setSeed(555L);

  四、测?/p>

  通过一个例子说明上面的用法

  import java.util.Random;

  /**

  * Java随机数测?/p>

  * User: leizhimin

  * Date: 2008-11-19 17:52:50

  */

  public class TestRandomNum {

  public static void main(String[] args) {

  randomTest();

  testNoSeed();

  testSeed1();

  testSeed2();

  }

  public static void randomTest() {

  System.out.println("--------------test()--------------");

  //q回以毫Uؓ(f)单位的当前时间?/p>

  long r1 = System.currentTimeMillis();

  //q回带正L(fng) double |大于或等?0.0Q小?1.0?/p>

  double r2 = Math.random();

  //通过RandomcL获取下一个随机的整数

  int r3 = new Random().nextInt();

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

  System.out.println("r3 = " + r2);

  System.out.println("r2 = " + r3);

  }

  public static void testNoSeed() {

  System.out.println("--------------testNoSeed()--------------");

  //创徏不带U子的测试Random对象

  Random random = new Random();

  for (int i = 0; i < 3; i++) {

  System.out.println(random.nextInt());

  }

  }

  public static void testSeed1() {

  System.out.println("--------------testSeed1()--------------");

  //创徏带种子的试Random对象

  Random random = new Random(555L);

  for (int i = 0; i < 3; i++) {

  System.out.println(random.nextInt());

  }

  }

  public static void testSeed2() {

  System.out.println("--------------testSeed2()--------------");

  //创徏带种子的试Random对象

  Random random = new Random();

  random.setSeed(555L);

  for (int i = 0; i < 3; i++) {

  System.out.println(random.nextInt());

  }

  }

  }

  q行l果Q?/p>

  --------------test()--------------

  r1 = 1227108626582

  r3 = 0.5324887850155043

  r2 = -368083737

  --------------testNoSeed()--------------

  809503475

  1585541532

  -645134204

  --------------testSeed1()--------------

  -1367481220

  292886146

  -1462441651

  --------------testSeed2()--------------

  -1367481220

  292886146

  -1462441651

  Process finished with exit code 0

  通过testSeed1()与testSeed2()Ҏ(gu)的结果可以看刎ͼ两个打印l果相同Q因Z们种子相同,再运行一ơ,l果q是一L(fng)Q这是带种子随机数的特性?/p>

  而不带种子的Q每ơ运行结果都是随机的?/p>

  五、综合应?/p>

  下面通过最q写的一个随机数工具cL展示用法Q?/p>

  import java.util.Random;

  /**

  * 随机数、随卛_W串工具

  * User: leizhimin

  * Date: 2008-11-19 9:43:09

  */

  public class RandomUtils {

  public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  public static final String numberChar = "0123456789";

  /**

  * q回一个定长的随机字符?只包含大写字母、数?

  *

  * @param length 随机字符串长?/p>

  * @return 随机字符?/p>

  */

  public static String generateString(int length) {

  StringBuffer sb = new StringBuffer();

  Random random = new Random();

  for (int i = 0; i < length; i++) {

  sb.append(allChar.charAt(random.nextInt(allChar.length())));

  }

  return sb.toString();

  }

  /**

  * q回一个定长的随机U字母字W串(只包含大写字母)

  *

  * @param length 随机字符串长?/p>

  * @return 随机字符?/p>

  */

  public static String generateMixString(int length) {

  StringBuffer sb = new StringBuffer();

  Random random = new Random();

  for (int i = 0; i < length; i++) {

  sb.append(allChar.charAt(random.nextInt(letterChar.length())));

  }

  return sb.toString();

  }

  /**

  * q回一个定长的随机U大写字母字W串(只包含大写字母)

  *

  * @param length 随机字符串长?/p>

  * @return 随机字符?/p>

  */

  public static String generateLowerString(int length) {

  return generateMixString(length).toLowerCase();

  }

  /**

  * q回一个定长的随机U小写字母字W串(只包含大写字母)

  *

  * @param length 随机字符串长?/p>

  * @return 随机字符?/p>

  */

  public static String generateUpperString(int length) {

  return generateMixString(length).toUpperCase();

  }

  /**

  * 生成一个定长的U?字符?/p>

  *

  * @param length 字符串长?/p>

  * @return U?字符?/p>

  */

  public static String generateZeroString(int length) {

  StringBuffer sb = new StringBuffer();

  for (int i = 0; i < length; i++) {

  sb.append('0');

  }

  return sb.toString();

  }

  /**

  * Ҏ(gu)数字生成一个定长的字符Ԍ长度不够前面?

  *

  * @param num 数字

  * @param fixdlenth 字符串长?/p>

  * @return 定长的字W串

  */

  public static String toFixdLengthString(long num, int fixdlenth) {

  StringBuffer sb = new StringBuffer();

  String strNum = String.valueOf(num);

  if (fixdlenth - strNum.length() >= 0) {

  sb.append(generateZeroString(fixdlenth - strNum.length()));

  } else {

  throw new RuntimeException("数? + num + "转化为长度ؓ(f)" + fixdlenth + "的字W串发生异常!");

  }

  sb.append(strNum);

  return sb.toString();

  }

  /**

  * Ҏ(gu)数字生成一个定长的字符Ԍ长度不够前面?

  *

  * @param num 数字

  * @param fixdlenth 字符串长?/p>

  * @return 定长的字W串

  */

  public static String toFixdLengthString(int num, int fixdlenth) {

  StringBuffer sb = new StringBuffer();

  String strNum = String.valueOf(num);

  if (fixdlenth - strNum.length() >= 0) {

  sb.append(generateZeroString(fixdlenth - strNum.length()));

  } else {

  throw new RuntimeException("数? + num + "转化为长度ؓ(f)" + fixdlenth + "的字W串发生异常!");

  }

  sb.append(strNum);

  return sb.toString();

  }

  public static void main(String[] args) {

  System.out.println(generateString(15));

  System.out.println(generateMixString(15));

  System.out.println(generateLowerString(15));

  System.out.println(generateUpperString(15));

  System.out.println(generateZeroString(15));

  System.out.println(toFixdLengthString(123, 15));

  System.out.println(toFixdLengthString(123L, 15));

  }

  }

  q行l果Q?/p>

  vWMBPiNbzfGCpHG

  23hyraHdJkKPwMv

  tigowetbwkm1nde

  BPZ1KNEJPHB115N

  000000000000000

  000000000000123

  000000000000123

  Process finished with exit code 0

  六、ȝ

  1、随机数很常用,在Java有三U生方式,以Random随机数的使用最为复杂?/p>

  2、Randomcd象有是否带种子之分,带种子的只要U子相同Q多ơ运行,生成随机数的l果L那样?/p>

  3、带U子随机数的带种子的对象创徏方式有两U,效果一栗但是带U子的随机数用处g不大?/p>

  4、Random的功能涵盖了Math.random()的功能?/p>

  5、可以通过随机数去做实现随机字W串{复杂的随机数据?/p>

  6、不要研I不重复的随机数Q意义不大?/p>

在Java 中我们可以用java.util.RandomcL产生一个随机数发生器。它有两UŞ式的构造函敎ͼ分别是Random()和Random(long seed)。Random()使用当前旉即System.currentTimeMillis()作ؓ(f)发生器的U子QRandom(long seed)使用指定的seed作ؓ(f)发生器的U子?br />
        随机数发生器(Random)对象产生以后Q通过调用不同的methodQnextInt()、nextLong()、nextFloat()、nextDouble(){获得不同类型随机数?br />
       1>生成随机?br />            Random random = new Random();
           Random random = new Random(100);//指定U子?00
           random调用不同的方法,获得随机数?br />            如果2个Random对象使用相同的种子(比如都是100Q,q且以相同的序调用相同的函敎ͼ那它们返回值完全相同。如下面代码中两个Random对象的输出完全相?br />           import java.util.*;
          class TestRandom {
                public static void main(String[] args) {
                     Random random1 = new Random(100);
                     System.out.println(random1.nextInt());
                     System.out.println(random1.nextFloat());
                     System.out.println(random1.nextBoolean());
                     Random random2 = new Random(100);
                     System.out.println(random2.nextInt());
                     System.out.println(random2.nextFloat());
                     System.out.println(random2.nextBoolean());
                }
            }

        2>指定范围内的随机?br />              随机数控制在某个范围?使用模数q算W?
            import java.util.*;
                 class TestRandom {
                      public static void main(String[] args) {
                           Random random = new Random();
                           for(int i = 0; i < 10;i++) {
                               System.out.println(Math.abs(random.nextInt())%10);
                           }
                      }
                 }
             获得的随机数有正有负的,用Math.abs使获取数据范围ؓ(f)非负?br />
       3>获取指定范围内的不重复随机数
            import java.util.*;
            class TestRandom {
                  public static void main(String[] args) {
                       int[] intRet = new int[6];
                       int intRd = 0; //存放随机?br />                        int count = 0; //记录生成的随机数个数
                       int flag = 0; //是否已经生成q标?br />                        while(count<6){
                            Random rdm = new Random(System.currentTimeMillis());
                            intRd = Math.abs(rdm.nextInt())%32+1;
                            for(int i=0;i<count;i++){
                                if(intRet[i]==intRd){
                                    flag = 1;
                                    break;
                                }else{
                                    flag = 0;
                                }
                            }
                            if(flag==0){
                                intRet[count] = intRd;
                                count++;
                            }
                   }
                  for(int t=0;t<6;t++){
                      System.out.println(t+"->"+intRet[t]);
                  }
               }
            }
Java中的随机数是否可以重复?Java中生的随机数能否可以用来生数据库主键Q带着q个问题Q我们做了一pd试?br /> 1.试一Q?使用不带参数的Random()构造函?br />
public class RandomTest {

public static void main(String[] args) {
     java.util.Random r=new java.util.Random();
     for(int i=0;i<10;i++){
         System.out.println(r.nextInt());
     }
}
}
E序q行l果Q?br /> -1761145445
-1070533012
216216989
-910884656
-1408725314
-1091802870
1681403823
-1099867456
347034376
-1277853157

再次q行该程序:(x)
-169416241
220377062
-1140589550
-1364404766
-1088116756
2134626361
-546049728
1132916742
-1522319721
1787867608

    从上面的试我们可以看出Q用不带参数的Random()构造函C生的随机C?x)重复。那么,什么情况下Java?x)生重复的随机数呢Q且看下面的试?br />
2. 试二:(x)为Random讄U子?br />
public class RandomTest_Repeat {
    /**
     * @param args
     */
    public static void main(String[] args) {
       java.util.Random r=new java.util.Random(10);
       for(int i=0;i<10;i++){
           System.out.println(r.nextInt());
       }
   }
}

无论E序q行多少ơ,其结果LQ?br /> -1157793070
1913984760
1107254586
1773446580
254270492
-1408064384
1048475594
1581279777
-778209333
1532292428

甚至在不同的机器上测试,试l果也不?x)改变?br />
3.原因分析Q?br /> (1) 首先h开Java DocQ我们会(x)看到Randomcȝ说明Q?br /> 此类的实例用于生成伪随机数流Q此cM?48 位的U子Q该U子可以使用U性同余公式对其进行修改(请参?Donald Knuth 的《The Art of Computer Programming, Volume 2》,W?3.2.1 节)?br /> 如果用相同的U子创徏两个 Random 实例Q则Ҏ(gu)个实例进行相同的Ҏ(gu)调用序列Q它们将生成q返回相同的数字序列。ؓ(f)了保证实现这U特性,我们为类Random指定了特定的法。ؓ(f)?Java 代码的完全可UL性,Java 实现必须让类 Random 使用此处所C的所有算法。但是允?Random cȝ子类使用其他法Q只要其W合所有方法的常规协定卛_?br /> Java Doc对Randomcdl解释得非常明白Q我们的试也验证了q一炏V?br />
(2) 如果没有提供U子敎ͼRandom实例的种子数是当前旉的毫U数Q可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码Q我们可以非常明地看到q一炏V?br />     /**
     * Creates a new random number generator. Its seed is initialized to
     * a value based on the current time:
     * <blockquote><pre>
     * public Random() { this(System.currentTimeMillis()); }</pre></blockquote>
     *
     * @see     java.lang.System#currentTimeMillis()
     */
     public Random() { this(System.currentTimeMillis()); }

4. l论Q?br />    通过上面的测试和分析Q我们会(x)对RandomcL较ؓ(f)深刻的理解。同Ӟ我觉得,通过阅读Java Doc的API文档Q可以很好地提高我们的Java~程能力Q做?#8220;知其?#8221;Q一旦遇到费解的问题Q不妨打开Java的源代码Q这h们就能做?#8220;知其所以然”?/p>



艾L 2009-11-20 13:32 发表评论
]]>
JAVA~程<font color=red>新手指引</font>http://www.aygfsteel.com/Reg/archive/2009/11/20/303027.html艾L艾LFri, 20 Nov 2009 03:50:00 GMThttp://www.aygfsteel.com/Reg/archive/2009/11/20/303027.htmlhttp://www.aygfsteel.com/Reg/comments/303027.htmlhttp://www.aygfsteel.com/Reg/archive/2009/11/20/303027.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/303027.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/303027.html环境安装配置Q?br />
TOMCAT的配|?br /> http://download.chinaitlab.com/soft/10791.htm

JAVA配置文g~写说明文档
http://download.chinaitlab.com/soft/10010.htm

一步一步学?x)配|Kjava开发环?br /> http://download.chinaitlab.com/soft/9483.htm

Weblogic7开发EJB的配|?br /> http://download.chinaitlab.com/soft/4938.htm

图解JSP环境安装配置
http://download.chinaitlab.com/soft/2157.htm

Tomcat配置Ҏ(gu)
http://download.chinaitlab.com/soft/931.htm

全程指导Linux下JAVA环境配置
http://download.chinaitlab.com/soft/11272.htm

学习(fn)Ҏ(gu)Q?br />
通过JB4学习(fn)JAVA
http://download.chinaitlab.com/soft/7589.htm

10步学?nbsp;JavaScript
http://download.chinaitlab.com/soft/6492.htm

Java Sctipt学习(fn)不求?br /> http://download.chinaitlab.com/soft/6361.htm

JSP学习(fn)指南
http://download.chinaitlab.com/soft/6152.htm

JAVA学习(fn)文档
http://download.chinaitlab.com/soft/6114.htm

J2EE学习(fn)W记
http://download.chinaitlab.com/soft/6048.htm

JavaScript学习(fn)
http://download.chinaitlab.com/soft/3029.htm

Java2 学习(fn)指南
http://download.chinaitlab.com/soft/2743.htm

Juniper学习(fn)指南
http://download.chinaitlab.com/soft/2227.htm

J2EE学习(fn)资料
http://download.chinaitlab.com/soft/1618.htm

JSP由浅入深
http://download.chinaitlab.com/soft/1315.htm

面向对象~程Q?br />
Java面向对象~程指南
http://download.chinaitlab.com/soft/9792.htm

JAVA的核心技术:(x)面向对象~程
http://download.chinaitlab.com/soft/9093.htm

Java ?nbsp;UML 面向对象E序设计
http://download.chinaitlab.com/soft/6053.htm

Java 2 ~程21天自学?br /> http://download.chinaitlab.com/soft/10507.htm

J2EE~程h
http://download.chinaitlab.com/soft/10506.htm

Java面向对象~程指南
http://download.chinaitlab.com/soft/9792.htm

Java专业~程指南
http://download.chinaitlab.com/soft/9791.htm

Java服务器高U编E?br /> http://download.chinaitlab.com/soft/9790.htm

J2EE EAI~程指南
http://download.chinaitlab.com/soft/9784.htm

J2MEMIDP无线讑֤~程指南
http://download.chinaitlab.com/soft/9765.htm

JAVA~程思想 中文?br /> http://download.chinaitlab.com/soft/9481.htm

Java XML~程指南
http://download.chinaitlab.com/soft/9097.htm

Java 数据库编E宝?br /> http://download.chinaitlab.com/soft/9095.htm

JAVA的核心技术:(x)面向对象~程
http://download.chinaitlab.com/soft/9093.htm

JDBC API数据库编E实作教?br /> http://download.chinaitlab.com/soft/9087.htm

核心 JSF ~程
http://download.chinaitlab.com/soft/7946.htm

JAVA 2应用~程150?br /> http://download.chinaitlab.com/soft/6815.htm

JAVA数据库编EJDBC
http://download.chinaitlab.com/soft/6113.htm

深入掌握J2EE~程技?br /> http://download.chinaitlab.com/soft/6030.htm

实用J2EE设计模式~程指南
http://download.chinaitlab.com/soft/5033.htm

Java for Internet~程技?br /> http://download.chinaitlab.com/soft/4198.htm

Java安全性编E指?br /> http://download.chinaitlab.com/soft/3773.htm

J2ME无线讑֤~程
http://download.chinaitlab.com/soft/3669.htm

J2EE EJB~程实例
http://download.chinaitlab.com/soft/3141.htm

Java~程思想 W三?br /> http://download.chinaitlab.com/soft/2982.htm

Java 极限~程
http://download.chinaitlab.com/soft/1707.htm

Java2~程详解
http://download.chinaitlab.com/soft/1705.htm


|络~程Q?br />
J2EE|络~程标准教程
http://download.chinaitlab.com/soft/9100.htm

Java|络~程实例
http://download.chinaitlab.com/soft/9090.htm

Java P2P|络~程技?br /> http://download.chinaitlab.com/soft/6333.htm

Java|络~程
http://download.chinaitlab.com/soft/3871.htm

|络~程基础之 Java Script
http://download.chinaitlab.com/soft/3618.htm

Solaris Shell ~程
http://download.chinaitlab.com/soft/6426.htm

SUN Solaris理手册
http://download.chinaitlab.com/soft/5732.htm

Solaris性能理
http://download.chinaitlab.com/soft/11247.htm

Solaris9安装指南
http://download.chinaitlab.com/soft/5022.htm

SOLARIS高pȝ理员指?br /> http://download.chinaitlab.com/soft/3726.htm

Solaris操作环境安全
http://download.chinaitlab.com/soft/1500.htm

Solaris GNOME2.0桌面用户指南
http://download.chinaitlab.com/soft/1488.htm

Solaris 9 12/03 安装指南
http://download.chinaitlab.com/soft/1484.htm

Solaris理员指?br /> http://download.chinaitlab.com/soft/1475.htm

中文Solaris9 pȝ理员指?br /> http://download.chinaitlab.com/soft/1463.htm

Solaris安全性专题指?br /> http://download.chinaitlab.com/soft/746.htm


XMLpdQ?br />
Java XML~程指南
http://download.chinaitlab.com/soft/9097.htm

JavaE序设计EJB、XML与数据库
http://download.chinaitlab.com/soft/9094.htm

XML l极教程
http://download.chinaitlab.com/soft/9057.htm

Java&XML应用
http://download.chinaitlab.com/soft/6211.htm

XML_JAVA指南
http://download.chinaitlab.com/soft/6163.htm

JDBCQ?br />
JDBC API数据库编E实作教?br /> http://download.chinaitlab.com/soft/9087.htm

JAVA数据库编EJDBC
http://download.chinaitlab.com/soft/6113.htm

JDBC API 参考教E第三版
http://download.chinaitlab.com/soft/6057.htm

JDBC与Java数据库程序设?br /> http://download.chinaitlab.com/soft/6018.htm

Java语言SQL接口 JDBCprogram
http://download.chinaitlab.com/soft/5938.htm

JSP应用E序开发指?br /> http://download.chinaitlab.com/soft/1546.htm

?nbsp;JDBC 理数据库连?br /> http://download.chinaitlab.com/soft/935.htm

JDOQ?br />
全面了解JDO数据库编E?br /> http://download.chinaitlab.com/soft/7992.htm

StrutsQ?br />
Struts中文手册
http://download.chinaitlab.com/soft/10516.htm

Struts架构指导
http://download.chinaitlab.com/soft/7529.htm

_Nstruts技?br /> http://download.chinaitlab.com/soft/6801.htm

Struts 学习(fn)h问答
http://download.chinaitlab.com/soft/6156.htm

HibernateQ?br />
Hibernate2.1.2参考手册中文版
http://download.chinaitlab.com/soft/8919.htm



JAVA与模式\J2EE模式Q?br />
J2EE 核心模式
http://download.chinaitlab.com/soft/9785.htm

Java 企业设计模式
http://download.chinaitlab.com/soft/9096.htm

Java单工厂创立性模式介l?br /> http://download.chinaitlab.com/soft/7398.htm

EJB设计模式
http://download.chinaitlab.com/soft/6135.htm

JAVA设计模式
http://download.chinaitlab.com/soft/6112.htm

实用J2EE设计模式~程指南
http://download.chinaitlab.com/soft/5033.htm

Java与模?br /> http://download.chinaitlab.com/soft/3073.htm

设计模式Java?br /> http://download.chinaitlab.com/soft/1723.htm


JBuilder开发Servlet?qing)JSPQ?br />
_NJBuilder
http://download.chinaitlab.com/soft/10565.htm

JBuilder速成资料
http://download.chinaitlab.com/soft/9714.htm

Jbuilder7和weblogic7整合开发手
http://download.chinaitlab.com/soft/9664.htm

JBUILDER9 软g开发项目实?br /> http://download.chinaitlab.com/soft/9089.htm

JbuilderX开发指?br /> http://download.chinaitlab.com/soft/9088.htm

Jbuilder x 指南
http://download.chinaitlab.com/soft/7984.htm

JBuilder4开发h员指?br /> http://download.chinaitlab.com/soft/5939.htm

JBuilder7 Weblogic7整和开发培训手?br /> http://download.chinaitlab.com/soft/4727.htm

JBuilder开发数据库应用E序
http://download.chinaitlab.com/soft/1701.htm

Java开发指?-Servlets和JSP?br /> http://download.chinaitlab.com/soft/9793.htm

Java Servlets ~程指南
http://download.chinaitlab.com/soft/9098.htm

Oreilly Java Servlet
http://download.chinaitlab.com/soft/6522.htm

Java Servlet开发与实例
http://download.chinaitlab.com/soft/6029.htm

深入Java Servlet |络~程
http://download.chinaitlab.com/soft/9783.htm

用JSP_Servlet构徏三层式管理信息系l?br /> http://download.chinaitlab.com/soft/6034.htm

Java Servlet帮助文档
http://download.chinaitlab.com/soft/2981.htm

JSP|站~程教程
http://download.chinaitlab.com/soft/11256.htm

JSP语法分析
http://download.chinaitlab.com/soft/11257.htm

JSP实用教程
http://download.chinaitlab.com/soft/10792.htm

JSP语法Q?Q?-HTML注释
http://download.chinaitlab.com/soft/10790.htm

JSP应用开发详?br /> http://download.chinaitlab.com/soft/10025.htm

JSP技术揭U?br /> http://download.chinaitlab.com/soft/9387.htm

JSP技术大?br /> http://download.chinaitlab.com/soft/9388.htm

JSP|上书店实例详解
http://download.chinaitlab.com/soft/9386.htm

JSP动态网|技?br /> http://download.chinaitlab.com/soft/8920.htm

JSP 技术大?br /> http://download.chinaitlab.com/soft/7782.htm

JSP高开发与应用
http://download.chinaitlab.com/soft/7633.htm

JSP 完全探烦
http://download.chinaitlab.com/soft/7546.htm

JSP 高开发与应用
http://download.chinaitlab.com/soft/7116.htm

JSP~程技?br /> http://download.chinaitlab.com/soft/7114.htm

JSP速成教程
http://download.chinaitlab.com/soft/6882.htm

JSP|络~程技?br /> http://download.chinaitlab.com/soft/6880.htm

JSPE序设计指南
http://download.chinaitlab.com/soft/6690.htm

最新JSP入门与应?br /> http://download.chinaitlab.com/soft/6697.htm

JSP快速入?br /> http://download.chinaitlab.com/soft/6636.htm

JSP|页~程
http://download.chinaitlab.com/soft/6527.htm

JSP 实用教程
http://download.chinaitlab.com/soft/6334.htm

JSP入门与提?br /> http://download.chinaitlab.com/soft/6326.htm

JSP语法
http://download.chinaitlab.com/soft/6116.htm

掌握自定义JSP标签
http://download.chinaitlab.com/soft/6096.htm

JSP 动态网站技术入门与提高
http://download.chinaitlab.com/soft/6019.htm

JSP实例入门
http://download.chinaitlab.com/soft/4377.htm

JSP教程之与数据库通信
http://download.chinaitlab.com/soft/3673.htm

如何成ؓ(f)优秀的JSP E序?br /> http://download.chinaitlab.com/soft/3002.htm

JSP数据库编E指?br /> http://download.chinaitlab.com/soft/2946.htm

JSP 高~程
http://download.chinaitlab.com/soft/2635.htm

JSP实用~程实例集锦
http://download.chinaitlab.com/soft/2154.htm

JSPE序设计_ֽ实例
http://download.chinaitlab.com/soft/2151.htm

JSPx应用
http://download.chinaitlab.com/soft/1547.htm

JSPE序设计_ֽ实例
http://download.chinaitlab.com/soft/1543.htm

JSP实用~程实例集锦
http://download.chinaitlab.com/soft/1537.htm

JSP基础
http://download.chinaitlab.com/soft/894.htm

Eclipse开发Servlet?qing)JSPQ?br />
Eclipse+Tomcat集成开发servle
http://download.chinaitlab.com/soft/6134.htm

J2EE Jboss Ejb With Eclipse 2003
http://download.chinaitlab.com/soft/6045.htm

艾L 2009-11-20 11:50 发表评论
]]>
<font color=#AD842A>配置较全?lt;/font><font color=#F1AF03>log4j.properties</font><font color=red>新手q阶?lt;/font>http://www.aygfsteel.com/Reg/archive/2009/11/18/302785.html艾L艾LWed, 18 Nov 2009 05:00:00 GMThttp://www.aygfsteel.com/Reg/archive/2009/11/18/302785.htmlhttp://www.aygfsteel.com/Reg/comments/302785.htmlhttp://www.aygfsteel.com/Reg/archive/2009/11/18/302785.html#Feedback2http://www.aygfsteel.com/Reg/comments/commentRss/302785.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/302785.htmllog4j.rootLogger=INFO,consoleAppender,logfile,MAIL
log4j.addivity.org.apache=true

#ConsoleAppenderQ控制台输出
#FileAppenderQ文件日志输?br /> #SMTPAppenderQ发邮g输出日志
#SocketAppenderQSocket日志
#NTEventLogAppenderQW(xu)indow NT日志
#SyslogAppenderQ?br /> #JMSAppenderQ?br /> #AsyncAppenderQ?br /> #NullAppender

#文g输出QRollingFileAppender
#log4j.rootLogger = INFO,logfile
log4j.appender.logfile = org.apache.log4j.RollingFileAppender
log4j.appender.logfile.Threshold = INFO  
# 输出以上的INFO信息
log4j.appender.logfile.File = INFO_log.html    
#保存log文g路径
log4j.appender.logfile.Append = true   
# 默认为trueQ添加到末尾Qfalse在每ơ启动时q行覆盖
log4j.appender.logfile.MaxFileSize = 1MB
# 一个log文g的大,过q个大小又?x)生?个日?# KB QMBQGB
log4j.appender.logfile.MaxBackupIndex = 3  
# 最多保?个文件备?
log4j.appender.logfile.layout = org.apache.log4j.HTMLLayout
# 输出文g的格?
log4j.appender.logfile.layout.LocationInfo = true
#是否昄cd和行?br /> log4j.appender.logfile.layout.Title =title:\u63d0\u9192\u60a8\uff1a\u7cfb\u7edf\u53d1\u751f\u4e86\u4e25\u91cd\u9519\u8bef
#html面?< title >
############################## SampleLayout ####################################
# log4j.appender.logfile.layout = org.apache.log4j.SampleLayout
############################## PatternLayout ###################################
# log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
# log4j.appender.logfile.layout.ConversionPattern =% d % p [ % c] -   % m % n % d
############################## XMLLayout #######################################
# log4j.appender.logfile.layout = org.apache.log4j.XMLLayout
# log4j.appender.logfile.layout.LocationInfo = true #是否昄cd和行?br /> ############################## TTCCLayout ######################################
# log4j.appender.logfile.layout = org.apache.log4j.TTCCLayout
# log4j.appender.logfile.layout.DateFormat = ISO8601
#NULL, RELATIVE, ABSOLUTE, DATE or ISO8601.
# log4j.appender.logfile.layout.TimeZoneID = GMT - 8 : 00
# log4j.appender.logfile.layout.CategoryPrefixing = false ##默认为true 打印cd?br /> # log4j.appender.logfile.layout.ContextPrinting = false ##默认为true 打印上下文信?br /> # log4j.appender.logfile.layout.ThreadPrinting = false ##默认为true 打印U程?br /> # 打印信息如下Q?br /> #2007 - 09 - 13   14 : 45 : 39 , 765 [http - 8080 - 1 ] ERROR com.poxool.test.test - error成功关闭链接
###############################################################################
#每天文g的输出:(x)DailyRollingFileAppender
#log4j.rootLogger = INFO,errorlogfile

log4j.appender.errorlogfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlogfile.Threshold = ERROR
log4j.appender.errorlogfile.File = ../logs/ERROR_log
log4j.appender.errorlogfile.Append = true
#默认为trueQ添加到末尾Qfalse在每ơ启动时q行覆盖
log4j.appender.errorlogfile.ImmediateFlush = true  
#直接输出Q不q行~存
# ' . ' yyyy - MM: 每个月更C个log日志
# ' . ' yyyy - ww: 每个星期更新一个log日志
# ' . ' yyyy - MM - dd: 每天更新一个log日志
# ' . ' yyyy - MM - dd - a: 每天的午夜和正午更新一个log日志
# ' . ' yyyy - MM - dd - HH: 每小时更C个log日志
# ' . ' yyyy - MM - dd - HH - mm: 每分钟更C个log日志
log4j.appender.errorlogfile.DatePattern = ' . ' yyyy - MM - dd ' .log '
#文g名称的格?/span>
log4j.appender.errorlogfile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlogfile.layout.ConversionPattern =%d %p [ %c] -   %m %n %d

#控制台输出:(x)
#log4j.rootLogger = INFO,consoleAppender
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Threshold = ERROR
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern =%d %-5p %m %n
log4j.appender.consoleAppender.ImmediateFlush = true

# 直接输出Q不q行~存
log4j.appender.consoleAppender.Target = System.err
# 默认是System.out方式输出

#发送邮Ӟ(x)SMTPAppender
#log4j.rootLogger = INFO,MAIL
log4j.appender.MAIL = org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold = INFO
log4j.appender.MAIL.BufferSize = 10
log4j.appender.MAIL.From = yourmail@gmail.com
log4j.appender.MAIL.SMTPHost = smtp.gmail.com
log4j.appender.MAIL.Subject = Log4J Message
log4j.appender.MAIL.To = yourmail@gmail.com
log4j.appender.MAIL.layout = org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern =%d - %c -%-4r [%t] %-5p %c %x - %m %n

#数据库:(x)JDBCAppender
log4j.appender.DATABASE = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL = jdbc:oracle:thin:@ 210.51 . 173.94 : 1521 :YDB
log4j.appender.DATABASE.driver = oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user = ydbuser
log4j.appender.DATABASE.password = ydbuser
log4j.appender.DATABASE.sql = INSERT INTO A1 (TITLE3) VALUES ( ' %d - %c %-5p %c %x - %m%n ' )
log4j.appender.DATABASE.layout = org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern =% d -   % c -%- 4r [ % t] %- 5p % c % x -   % m % n

 



艾L 2009-11-18 13:00 发表评论
]]>
JNI之C++调用Javac?—?java.lang.Stringhttp://www.aygfsteel.com/Reg/archive/2009/11/18/302772.html艾L艾LWed, 18 Nov 2009 03:01:00 GMThttp://www.aygfsteel.com/Reg/archive/2009/11/18/302772.htmlhttp://www.aygfsteel.com/Reg/comments/302772.htmlhttp://www.aygfsteel.com/Reg/archive/2009/11/18/302772.html#Feedback0http://www.aygfsteel.com/Reg/comments/commentRss/302772.htmlhttp://www.aygfsteel.com/Reg/services/trackbacks/302772.html原文

JNI之C++调用Javac?—?java.lang.String

    Z么要用C++调用Javac?很难回答Q写着文章只是觉得JNI很有意思。于是开始编写一D用VC++在Windowspȝ里调用java的Stringc,在C++里调用Stringcd的一些方法?/p>

    JNI已经被开发了很多q_(d)而在?q多的Java~程旉里从来没有接触过。直到最q研IJVM实现原理才注意到JNI?JNI既Java Native InterfaceQNativeq个词我见过我认为最恰当的翻译就是原生。原生的意思就是来自系l自qQ原汁原味的东西Q例如Win32 API。Javac需要在虚拟Zq行Q也׃是原生的Q同?NET Framework也不是原生的。JNI也就是Java原生接口。关于JNI的规范,以及(qing)Z么要使用它,它能做些什么,都在http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/jniTOC.html里记q着?/p>

    JNI是规范,它规定了虚拟机的接口Q而把具体的实现留l开发者?/p>

    JVM的实C是唯一的,目前存在很多UJava虚拟机,Sun HotspotQIBM JDKQ还有HP的,Kaffe{等。最行的就是Sun的HotspotQ最复杂的就是IBM JDKQ这是IBM的一贯作风。本文不讨论JVM的实玎ͼ只关注JNI。如果?zhn)安装了Sun的JDKQ?zhn)p在[JAVA_HOME]\include目录下找到jni.h。这个头文g是虚拟机的唯一接口Q你可以调用它声明的函数创徏一个JVM?/p>

    在说明C++调用JavacM前,我想先演CZ下如果编写Java Native Method?/p>

1Q编写带有NativeҎ(gu)的Javac?/p>

package org.colimas.jni.test;

public class JniTest {

    static { System.loadLibrary("JniTestImpl"); }  //JVM调用JniTestImpl.dll

    public JniTest(){
    }

    //原生Ҏ(gu)
    public native void print(String str);

    /**
    * @param args
    */
    public static void main(String[] args) {
            JniTest test=new JniTest();
            test.print("hello JVM"); //调用原生Ҏ(gu)
    }
}

2Q用javah生成c语言头文件?/p>

javah -jni org.colimas.jni.test.JniTest

目录里多了一个org_colimas_jni_test_JniTest.h文gQ打开文gQ内容如?

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class org_colimas_jni_test_JniTest */


#ifndef _Included_org_colimas_jni_test_JniTest
#define _Included_org_colimas_jni_test_JniTest
#ifdef __cplusplus

extern "C" {

#endif

/*
 * Class:     org_colimas_jni_test_JniTest
 * Method:    print
 * Signature: (Ljava/lang/String;)V
 */

JNIEXPORT void JNICALL Java_org_colimas_jni_test_JniTest_print
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}

#endif
#endif


其中的Java_org_colimas_jni_test_JniTest_print是JniTestc里面的print原生Ҏ(gu)的C语言声明?/p>

3Q编写C(j)代码实现原生Ҏ(gu)print

#include <jni.h>
#include "org_colimas_jni_test_JniTest.h" //javah生成的头文g
#include <stdio.h>

JNIEXPORT void JNICALL Java_org_colimas_jni_test_JniTest_print
  (JNIEnv *env, jobject object,jstring str)
{
       //获得字符?br />        const char * txt=(*env)->GetStringUTFChars(env,str,0);
       printf("%s\n",txt); //打印到控制台
       return;
}


参数JNIEnv *envQ是JNI里最重要的变量。Java.exe创徏JVMQ之后JVM生成一个envQ该env相当于JVM内的SessionQ可以完成创建Java对象Q调用类Ҏ(gu)Q获得类的属性等{?/p>

在这里env方法的参数Str从JNI的jstringcd转换为常数char数组?/p>

4Q编?/p>

cl  /Ic:\j2sdk1.4.2_10\include /Ic:\j2sdk1.4.2_10\include\win32 /c  JniTestImpl.c

5Q连接ؓ(f)DLL

link /dll JniTestImpl.obj

6Q设|PATH

set PATH=C:\MyProject\Colimas\CD\JNI\MyJNI;%PATH%

7Q运?/p>

java org.colimas.jni.test.JniTest

q回l果

hello JVM

l束

    以上是实现Java原生Ҏ(gu)的开发过E,下面q入正题Q用C++调用Java的java.lang.StringcR?/p>

1. Objectcd创徏JVM?/p>

使用JavacM前必要创徏JVM环境。JDK由java.exe来完成。本文有Objectcȝ静态方法BeginJVM来创建,用EndJVM来关闭?/p>

创徏JVM之后?x)在创?个变量,分别是JNIEnv* env和JavaVM* jvmQJNIEnv上文已经说明QJavaVMQ顾名思义Q代表Java虚拟机,用它来关闭JVM?/p>

Objectcȝ头文?/p>

#include "jni.h"

class Object
{
public:
    static bool BeginJVM();
    static bool EndJVM();
    Object();
    virtual ~Object();

protected:
    static JNIEnv* env;
    static JavaVM* jvm;
};

object.cpp代码

#include "stdafx.h"
#include "JavaClasses.h"
#include "Object.h"

Object::Object()
{}

Object::~Object()
{}

JNIEnv* Object::env=NULL;
JavaVM* Object::jvm=NULL;

//创徏JVM

bool Object::BeginJVM()
{

    JavaVMOption options[3];
    JavaVMInitArgs vm_args;

    //各种参数
    options[0].optionString="-Xmx128m";
    options[1].optionString="-Verbose:gc";
    options[2].optionString="-Djava.class.path=.";

    vm_args.version=JNI_VERSION_1_2;
    vm_args.options=options;
    vm_args.nOptions=3;

    //创徏JVMQ获得jvm和env
    int res = JNI_CreateJavaVM(&jvm,(void **)&env, &vm_args);
    return true;
}

bool Object::EndJVM()
{
    //关闭JVM
    jvm->DestroyJavaVM();
    return true;
}

2. C++的Stringc调用java.lang.StringcL?/p>

~写C(j)++版的Stringc,调用java StringcL法。调用的Ҏ(gu)如下Q?/p>

    String  replaceAll(String regex, String replacement);

    boolean endsWith(String str);

    int indexOf(String str);

    int compareTo(String anotherString);

    char charAt(int i);

String的头文g:

class String  :public Object
{
public:
//与要调用的JavaҎ(gu)名一致?br />     const char * replaceAll(char *regex,char *replacement);

    bool endsWith(char * str);

    int indexOf(char * str);

    int compareTo(char *anotherString);

    char charAt(int i);

    String(char *str);

    virtual ~String();
};

实现Q?/p>

#include "stdafx.h"
#include "String.h"
#include "jni.h"

using namespace std;

jclass clazz;    //全局变量Q用来传递class
jobject object;  //全局变量Q用来传递object
String::String(char *str)
{
    jstring jstr;

    if (Object::env ==NULL){
        cout << "JVM is not created" << endl;
        exit(-1);
    }

    //获得java.lang.Stringc?br />     clazz=Object::env->FindClass("java/lang/String");

    if (clazz ==0 ){
        cout << "Class is not found" << endl;
        exit(-1);
    }

    //获得String(String str)构造体
    jmethodID mid= Object::env->GetMethodID(clazz,"<init>", "(Ljava/lang/String;)V");

    if (mid==0){
        cerr<< "GetMethodID Error for class" << endl;
        exit(-1);
    }

    //字W串装为jstring?br />     jstr = Object::env->NewStringUTF(str);

    if (jstr == 0) {
        cerr << "Out of memory" <<endl;
        exit(-1);
    }

    cout << "invoking method" << endl;

    //创徏一个java.lang.String对象?br />     object=Object::env->NewObject(clazz,mid,jstr);
}

String::~String()
{}

char String::charAt(int i)
{
    if (Object::env ==NULL){
        cout << "JVM is not created" << endl;
        exit(-1);
    }

    if (clazz ==0 ){
        cout << "Class is not found" << endl;
        exit(-1);
    }

    if (object ==0 ){
        cout << "String object is not created" << endl;
        exit(-1);
    }

    jmethodID mid;

    //获得charAtҎ(gu)Q(IQC表示 参数为int型,q回char型。详l参见JNI规范
    mid = Object::env->GetMethodID(clazz,"charAt", "(I)C");

    if (mid==0){
        cerr<< "GetMethodID Error for class" << endl;
        exit(-1);
    }

    jint ji=i;

    cout << "invoking method" << endl;

    //调用charAt
    jchar z = Object::env->CallCharMethod(object,mid,i);

    //q回l果?br />     return z;
}


int String::compareTo(char *anotherString)
{

    if (Object::env ==NULL){
        cout << "JVM is not created" << endl;
        exit(-1);
    }

    if (clazz ==0 ){
        cout << "Class is not found" << endl;
        exit(-1);
    }

    if (object ==0 ){
        cout << "String object is not created" << endl;
        exit(-1);
    }

    jmethodID mid;

    //(Ljava/lang/String;)I表示参数为java.lang.StringQ返回int
    mid= Object::env->GetMethodID(clazz,"compareTo", "(Ljava/lang/String;)I");

    if (mid==0){
        cerr<< "GetMethodID Error for class" << endl;
        exit(-1);
    }

    jstring jstr = Object::env->NewStringUTF(anotherString);
    cout << "invoking method" << endl;

    //调用Ҏ(gu)
    jint z=Object::env->CallIntMethod(object,mid,jstr);

    //q回l果
    return z;
}


int String::indexOf(char *str)
{
    if (Object::env ==NULL){
        cout << "JVM is not created" << endl;
        exit(-1);
    }

    if (clazz ==0 ){
        cout << "Class is not found" << endl;
        exit(-1);
    }

    if (object ==0 ){
        cout << "String object is not created" << endl;
        exit(-1);
    }

    jmethodID mid;
    mid= Object::env->GetMethodID(clazz,"indexOf", "(Ljava/lang/String;)I");

    if (mid==0){
        cerr<< "GetMethodID Error for class" << endl;
        exit(-1);
    }

    jstring jstr = Object::env->NewStringUTF(str);
    cout << "invoking method" << endl;

    jint z=Object::env->CallIntMethod(object,mid,jstr);
    return z;
}


bool String::endsWith(char *str)
{

    if (Object::env ==NULL){
        cout << "JVM is not created" << endl;
        exit(-1);
    }

    if (clazz ==0 ){
        cout << "Class is not found" << endl;
        exit(-1);
    }

    if (object ==0 ){
        cout << "String object is not created" << endl;
        exit(-1);
    }

    jmethodID mid;
    mid= Object::env->GetMethodID(clazz,"endsWith", "(Ljava/lang/String;)Z");

    if (mid==0){
        cerr<< "GetMethodID Error for class" << endl;
        exit(-1);
    }

    jstring jstr = Object::env->NewStringUTF(str);
    cout << "invoking method" << endl;

    bool z = Object::env->CallBooleanMethod(object,mid,jstr);
    return z;
}


const char * String::replaceAll(char *regex, char *replacement)
{
    if (Object::env ==NULL){
        cout << "JVM is not created" << endl;
        exit(-1);
    }

    if (clazz ==0 ){
        cout << "Class is not found" << endl;
        exit(-1);
    }

    if (object ==0 ){
        cout << "String object is not created" << endl;
        exit(-1);
    }

    jmethodID mid;
    mid= Object::env->GetMethodID(clazz,"replaceAll", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");

    if (mid==0){
        cerr<< "GetMethodID Error for class" << endl;
        exit(-1);
    }

    jvalue array[2];
    jstring jreg = Object::env->NewStringUTF(regex);
    jstring jstr = Object::env->NewStringUTF(replacement);

    array[0].l=jreg;
    array[1].l=jstr;

    cout << "invoking method" << endl;

    //传入参数Q调用replaceAllҎ(gu)
    jobject z=Object::env->CallObjectMethodA(object,mid,array);
    const char *result=Object::env->GetStringUTFChars((jstring)z, 0);

    return (const char *)result;
}

3Q测?/p>

~写试代码

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)){
        cerr << _T("Fatal Error: MFC initialization failed") << endl;
        nRetCode = 1;
    } else{
        //创徏JVM
        Object::BeginJVM();

        String test("hello");

        //调用replaceAll
        const char *result = test.replaceAll("l","z");

        //q回l果
        cout<< result <<endl;

        //关闭JVM
        Object::EndJVM();
    }
    return nRetCode;
}


4Q运?/p>

~译需?jni.h和jvm.lib文g?/p>

jni.h在[JAVA_HOME]\include

jvm.lib在[JAVA_HOME]\lib

q行需要jvm.dll

jvm.dll在[JAVA_HOME]\ jre\bin\client

q行l果如下Q?/p>

invoking method

invoking method

hezzo

Press any key to continue

管本文的代码很有意思,但我q没有想到有什么h(hun)|以及(qing)应用到实际项目中的理由?/p>


本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/onlymilan/archive/2006/07/20/947652.aspx



艾L 2009-11-18 11:01 发表评论
]]>
վ֩ģ壺 | ̩| | | Ϣ| | | ˫| | | | | | | | | ±| Ů| ƽ| ̨| ȫ| | ̩| | ͩ| | | ͭ| | | | ϻ| ʡ| ԭ| | | ²| ˹| | | |