你好 –> %C4%E3%BA%C3 %E4%BD%A0%E5%A5%BD

URLEncoder和URLDecoder Java code import java.io.*; import java.net.*; public class Test { public static void main(String[] args) throws UnsupportedEncodingException { String str = new String(“你好,世界!”); String encode = URLEncoder.encode(str, “UTF8″); System.out.println(encode); String decode = URLDecoder.decode(encode, “UTF8″); System.out.println(decode); } } UTF8结果为:%E4%BD%A0%E5%A5%BD GBK结果为:%C4%E3%BA%C3

Java文件夹操作的那点事, 嵌套,shell,bat,FTP

Java进行文件操作比较容易,但是进行文件夹操作,例如文件夹复制删除操作就比较麻烦,没有直接的操作符和API接口,需要自己进行递推嵌套完成相应的工作,下面是利用java进行文件夹的复制和删除操作:     public static void delete(File file) {             if (!file.exists()) return;             if (file.isFile()) {                 file.delete();             } else {                 for (File f : file.listFiles()) {                     delete(f);                 }                 file.delete();             }         }            /**       * 复制文件(夹)到一个目标文件夹         * @param resFile  源文件(夹)         * @param objFolderFile 目标文件夹         * @throws IOException 异常时抛出         */         public static void copy(File resFile, File objFolderFile) throws IOException {             if (!resFile.exists()) return;             if (!objFolderFile.exists()) objFolderFile.mkdirs();  … 继续阅读

关于Java正则表达式的书写

处理文本,书写正则表达式是必备技能之一,参考一下两篇文章即可: 1. java正则表达式详解与应用(学习必备) 2. Java学习笔记之Pattern类的用法详解 分享一个网页和邮箱的正则抽取: Pattern EMail = Pattern.compile(        “\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*”, Pattern.DOTALL);       Pattern WebSite= Pattern.compile(        “(ftp|http[s]?:\\/\\/)?([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?”,        Pattern.CASE_INSENSITIVE);  

Java Date, Calendar小结

看到一串数字来表示日期1347883680来表示日期,像。。。电话号码。。。而实际是用秒来记录时间,那么从何时记起呢?–1970年1月1日。。。。。 下面转载一份博客记录Java日期使用小结:[原文:http://robinjie.iteye.com/blog/54386] Java 语言的Calendar,GregorianCalendar (日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象。学习日期, 日期格式, 日期的解析和日期的计算。 我们将讨论下面的类: 1、 具体类(和抽象类相对)java.util.Date 2、 抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat 3、 抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar 具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类. 1. java.util.Date及其格式化 Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, … 继续阅读

Apache Log4j使用实例

转一篇log4j的使用说明,原文出自: ——————————————————– 1.Logger类 通过Logger类的静态方法Logger.getRootLogger得到RootLogger。所有其他的loggers是通过静态方法Logger.getLogger来实例化并获取的。这个方法Logger.getLogger把所想要的logger的名字作为参数。 Logger类的一些其它基本方法在下面列出: package org.apache.log4j;    public class Logger {      // Creation and retrieval methods:      public static Logger getRootLogger();      public static Logger getLogger(String name);           // printing methods:      public void debug(Object message);      public void info(Object message);      public void warn(Object message);      public void error(Object message);      public void fatal(Object message);         // generic printing method:      public void log(Level l, Object message);    }   2. getLogger方法 以一样的参数名字调用getLogger方法,返回的reference总是指向完全相同的logger对象。例如,在这里: Logger x = Logger.getLogger(“wombat”); Logger y = … 继续阅读

java.util.Properties类–jar包外的配置文件读取

运行java程序的时候常打成jar包扔到服务器上运行,但是一些IP,和路径等配置需要动态修改,为了把这写配置与jar包隔离开,可以使用Properties类读取外部配置,下面转载一篇文章介绍Properties的使用: 下文出自:http://gimgen1026.iteye.com/blog/152023 ——————————————————————————————————— Properties 类已不是新东西了,它在 Java 编程的早期就有了,并且几乎没有什么变化。J2SE 的 Tiger 版本增强了这个类,不仅可以用它在单独一行中指定用等号分隔的多个键-值对,还可以用XML 文件装载和保存这些键-值对。在 驯服 Tiger的这一期文章中,John Zukowski 展示了如何驾驭这匹新一代的“役马”。 J2SE 1.5 以前的版本要求直接使用 XML 解析器来装载配置文件并存储设置。虽然这并非是一件困难的事情,并且解析器是平台的标准部分,但是额外的工作总是有点让人烦。最近更新的 java.util.Properties 类现在提供了一种为程序装载和存储设置的更容易的方法: loadFromXML(InputStream is) 和 storeToXML(OutputStream os, String comment) 方法。 Properties 基本知识 如果不熟悉 java.util.Properties 类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的,如清单 1 所示。 清单 1. 一组属性示例 … 继续阅读

浅析 Java Thread.join()

一、在研究join的用法之前,先明确两件事情。 1.join方法定义在Thread类中,则调用者必须是一个线程, 例如: Thread t = new CustomThread();//这里一般是自定义的线程类 t.start();//线程起动 t.join();//此处会抛出InterruptedException异常 2.上面的两行代码也是在一个线程里面执行的。 以上出现了两个线程,一个是我们自定义的线程类,我们实现了run方法,做一些我们需要的工作;另外一个线程,生成我们自定义线程类的对象,然后执行 customThread.start(); customThread.join(); 在这种情况下,两个线程的关系是一个线程由另外一个线程生成并起动,所以我们暂且认为第一个线程叫做“子线程”,另外一个线程叫做“主线程”。 二、为什么要用join()方法 主线程生成并起动了子线程,而子线程里要进行大量的耗时的运算(这里可以借鉴下线程的作用),当主线程处理完其他的事务后,需要用到子线程的处理结果,这个时候就要用到join();方法了。 三、join方法的作用 在网上看到有人说“将两个线程合并”。这样解释我觉得理解起来还更麻烦。不如就借鉴下API里的说法: “等待该线程终止。” 解释一下,是主线程(我在“一”里已经命名过了)等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。(Waits for this thread to die.) 四、用实例来理解 写一个简单的例子来看一下join()的用法,一共三个类: 1.CustomThread 类 2. CustomThread1类 3. JoinTestDemo 类,main方法所在的类。 代码1: package wxhx.csdn2;       /**    *    … 继续阅读

List.add(int[])的问题,链表添加数组或对象问题

由于List.add(),追加的数值,则List记录数值, 而如果是对象,则记录地址。对于数组来说,相互传递的地址,那么运行下面的函数会发现,List中add追加的都是同一个地址,并且对应的值都是最后一次更新后的值。 private List<int[]> permutedFpt(int[] v) {        List<int[]> VList =new ArrayList<int[]>();        VList.add(v);        for (int i = 1; i < simHash.blockNum; i++) {            int[] tempV = v;            int k=this.moveBits*i;   //移动的元素个数            tempV = Reverse(tempV, 0, this.hashbits-k-1);            tempV = Reverse(tempV, this.hashbits-k, this.hashbits-1);            tempV = Reverse(tempV, 0, this.hashbits-1);            VList.add(tempV);        }        return VList;    }       private int[] Reverse(int[] v, int b, int e) {        for(; b < e; b++, e–)        {        int temp = v[e];        v[e] = v[b];        v[b] = temp; … 继续阅读

String,StringBuffer与StringBuilder

String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String … 继续阅读