Java经典实例(第二版)

来源:互联网 发布:肯尼迪绕丝数据 编辑:程序博客网 时间:2024/05/16 20:50
1. 获取环境变量Java代码 1.    System.getenv("PATH");  2.    System.getenv("JAVA_HOME");   2. 获取系统属性Java代码 1.    System.getProperty("pencil color");  // 得到属性值  2.    java -Dpencil color=green  3.    System.getProperty("java.specification.version");  // 得到Java版本号  4.    Properties p = System.getProperties();  // 得到所有属性值  5.    p.list(System.out);   3. StringTokenizerJava代码 1.    // 能够同时识别, 和 |  2.    StringTokenizer st = new StringTokenizer("Hello, World|of|Java", ", |");  3.    while (st.hasMoreElements()) {  4.        st.nextToken();  5.    }  6.      7.    // 把分隔符视为token  8.    StringTokenizer st = new StringTokenizer("Hello, World|of|Java", ", |",  true);   4. StringBuffer(同步)和StringBuilder(非同步)Java代码 1.    StringBuilder sb = new StringBuilder();  2.    sb.append("Hello");  3.    sb.append("World");  4.    sb.toString();  5.    new StringBuffer(a).reverse();   // 反转字符串   5. 数字Java代码 1.    // 数字与对象之间互相转换 - Integer转int  2.    Integer.intValue();  3.      4.    // 浮点数的舍入    5.    Math.round()  6.      7.    // 数字格式化  8.    NumberFormat  9.      10.    // 整数 -> 二进制字符串  11.    toBinaryString() 或valueOf()  12.      13.    // 整数 -> 八进制字符串  14.    toOctalString()  15.      16.    // 整数 -> 十六进制字符串  17.    toHexString()  18.      19.    // 数字格式化为罗马数字  20.    RomanNumberFormat()  21.      22.    // 随机数  23.    Random r = new Random();  24.    r.nextDouble();  25.    r.nextInt();   6. 日期和时间Java代码 1.    // 查看当前日期  2.    Date today = new Date();  3.    Calendar.getInstance().getTime();  4.      5.    // 格式化默认区域日期输出  6.    DateFormat df = DateFormat.getInstance();  7.    df.format(today);  8.      9.    // 格式化制定区域日期输出        10.    DateFormat df_cn = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);  11.    String now = df_cn.format(today);  12.      13.    // 按要求格式打印日期  14.    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  15.    sdf.format(today);  16.      17.    // 设置具体日期  18.    GregorianCalendar d1 = new GregorianCalendar(2009, 05, 06);  // 6月6日  19.    GregorianCalendar d2 = new GregorianCalendar();  // 今天  20.    Calendar d3 = Calendar.getInstance();  // 今天  21.    d1.getTime();  // Calendar或GregorianCalendar转成Date格式  22.    d3.set(Calendar.YEAR, 1999);  23.    d3.set(Calendar.MONTH, Calendar.APRIL);  24.    d3.set(Calendar.DAY_OF_MONTH, 12);  25.      26.    // 字符串转日期  27.    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  28.    Date now = sdf.parse(String);  29.      30.    // 日期加减  31.    Date now = new Date();  32.    long t = now.getTime();  33.    t += 700*24*60*60*1000;  34.    Date then = new Date(t);  35.      36.    Calendar now = Calendar.getInstance();  37.    now.add(Calendar.YEAR, -2);  38.      39.    // 计算日期间隔(转换成long来计算)  40.    today.getTime() - old.getTime();  41.      42.    // 比较日期  43.    Date 类型,就使用equals(), before(), after()来计算  44.    long类型,就使用==, <, >来计算  45.      46.    // 第几日  47.    使用 Calendar的get()方法  48.    Calendar c = Calendar.getInstance();  49.    c.get(Calendar.YEAR);   50.      51.    // 记录耗时  52.    long start = System.currentTimeMillis();  53.    long end = System.currentTimeMillis();  54.    long elapsed = end - start;  55.    System.nanoTime();  //毫秒  56.      57.    // 长整形转换成秒  58.    Double.toString(t/1000D);   7. 结构化数据Java代码 1.    // 数组拷贝  2.    System.arrayCopy(oldArray, 0, newArray, 0, oldArray.length);  3.      4.    // ArrayList  5.    add(Object o)  // 在末尾添加给定元素  6.    add(int i, Object o)  // 在指定位置插入给定元素  7.    clear()  // 从集合中删除全部元素  8.    Contains(Object o)  // 如果Vector包含给定元素,返回真值  9.    get(int i)  // 返回 指定位置的对象句柄  10.    indexOf(Object o)  // 如果找到给定对象,则返回其索引值;否则,返回-1  11.    remove(Object o)  // 根据引用删除对象  12.    remove(int i)  // 根据 位置删除对象  13.    toArray()  // 返回包含集合对象的数组  14.      15.    // Iterator  16.    List list = new ArrayList();  17.    Iterator it = list.iterator();  18.    while (it.hasNext())  19.    Object o = it.next();  20.      21.    // 链表  22.    LinkedList list = new LinkedList();  23.    ListIterator it = list.listIterator();  24.    while (it.hasNext())  25.    Object o = it.next();  26.      27.    // HashMap  28.    HashMap<String, String> hm = new HashMap<String, String>();  29.    hm.get(key);  // 通过key得到value  30.    hm.put("No1", "Hexinyu");  31.    hm.put("No2", "Sean");  32.    // 方法1: 获取全部键值    33.    Iterator<String> it = hm.values().iterator();   34.    while (it.hasNext()) {  35.        String myKey = it.next();  36.        String myValue = hm.get(myKey);  37.    }  38.    // 方法2: 获取全部键值        39.    for (String key : hm.keySet()) {  40.        String myKey = key;  41.        String myValue = hm.get(myKey);  42.    }  43.      44.    // Preferences - 与系统相关的用户设置,类似名-值对  45.    Preferences prefs = Preferences.userNodeForPackage(ArrayDemo.class);  46.    String text = prefs.get("textFontName", "lucida-bright");  47.    String display = prefs.get("displayFontName", "lucida-balckletter");  48.    System.out.println(text);  49.    System.out.println(display);  50.    // 用户设置了新值,存储回去       51.    prefs.put("textFontName", "new-bright");  52.    prefs.put("displayFontName", "new-balckletter");  53.      54.    // Properties - 类似名-值对,key和value之间,可以用"=",":"或空格分隔,用"#" 和"!"注释  55.    InputStream in = MediationServer.class.getClassLoader().getResourceAsStream("msconfig.properties");  56.    Properties prop = new Properties();  57.    prop.load(in);  58.    in.close();  59.    prop.setProperty(key, value);  60.    prop.getProperty(key);  61.      62.    // 排序  63.    1. 数组:Arrays.sort(strings);  64.    2. List:Collections.sort(list);  65.    3. 自定义类:class SubComp implements Comparator  66.        然 后使用Arrays.sort(strings, new SubComp())  67.         68.    // 两个接口  69.    1. java.lang.Comparable: 提供对象的自然排序,内置于类中  70.       int compareTo(Object o);  71.        boolean equals(Object o2);  72.    2. java.util.Comparator: 提供特定的比较方法  73.       int compare(Object o1, Object o2)  74.         75.    // 避免重复排序,可以使用TreeMap  76.    TreeMap sorted = new TreeMap(unsortedHashMap);  77.      78.    // 排除重复元素  79.    Hashset hs - new HashSet();  80.      81.    // 搜索对象  82.    binarySearch(): 快 速查询 - Arrays, Collections  83.    contains(): 线型搜 索 - ArrayList, HashSet, Hashtable, linkedList, Properties, Vector  84.    containsKey(): 检 查集合对象是否包含给定 - HashMap, Hashtable, Properties, TreeMap  85.    containsValue(): 主 键(或给定值) - HashMap, Hashtable, Properties, TreeMap  86.    indexOf(): 若 找到给定对象,返回其位置 - ArrayList, linkedList, List, Stack, Vector  87.    search(): 线 型搜素 - Stack  88.      89.    // 集合转数组  90.    toArray();  91.      92.    // 集合总结  93.    Collection: Set - HashSet, TreeSet  94.    Collection: List - ArrayList, Vector, LinkedList  95.    Map: HashMap, HashTable, TreeMap   8. 泛型与foreachJava代码 1.    // 泛型  2.    List<String> myList = new ArrayList<String>();  3.      4.    // foreach  5.    for (String s : myList) {  6.        System.out.println(s);  7.    }   9. 面向对象Java代码 1.    // toString()格式化  2.    public class ToStringWith {  3.        int x, y;  4.        public ToStringWith(int anX, int aY) {  5.            x = anX;  6.            y = aY;  7.        }  8.        public String toString() {  9.            return "ToStringWith[" + x + "," + y + "]";  10.        }  11.        public static void main(String[] args) {  12.            System.out.println(new ToStringWith(43, 78));  13.        }  14.    }  15.      16.    // 覆盖equals方法  17.    public boolean equals(Object o) {  18.        if (o == this)  // 优化  19.            return true;  20.        if (!(o instanceof EqualsDemo))  // 可投射到这个类  21.            return false;  22.        EqualsDemo other = (EqualsDemo)o;  // 类型转换  23.        if (int1 != other.int1)  // 按字段比较  24.            return false;  25.        if (!obj1.equals(other.obj1))  26.            return false;  27.        return true;  28.    }  29.      30.    // 覆盖hashcode方法  31.    private volatile int hashCode = 0;  //延迟初始化  32.    public int hashCode() {  33.        if (hashCode == 0) {  34.            int result = 17;  35.            result = 37 * result + areaCode;  36.        }  37.        return hashCode;  38.    }  39.      40.    // Clone方法  41.    要 克隆对象,必须先做两步: 1. 覆盖对象的clone()方法; 2. 实现空的Cloneable接口  42.    public class Clone1 implements Cloneable {  43.        public Object clone() {  44.            return super.clone();  45.        }  46.    }  47.      48.    // Finalize方法  49.    Object f = new Object() {  50.        public void finalize() {  51.            System.out.println("Running finalize()");  52.        }  53.    };        54.    Runtime.getRuntime().addShutdownHook(new Thread() {  55.        public void run() {  56.            System.out.println("Running Shutdown Hook");  57.        }  58.    });  59.    在 调用System.exit(0);的时候,这两个方法将被执行  60.      61.    // Singleton模式  62.    // 实现1  63.    public class MySingleton() {  64.        public static final MySingleton INSTANCE = new MySingleton();  65.        private MySingleton() {}  66.    }  67.    // 实现2  68.    public class MySingleton() {  69.        public static MySingleton instance = new MySingleton();  70.        private MySingleton() {}  71.        public static MySingleton getInstance() {  72.            return instance;  73.        }  74.    }  75.      76.    // 自定义异常  77.    Exception: 编 译时检查  78.    RuntimeException: 运行时检查  79.    public class MyException extends RuntimeException {  80.        public MyException() {  81.            super();  82.        }  83.        public MyException(String msg) {  84.            super(msg);  85.        }  86.    }   10. 输入和输出Java代码 1.    // Stream, Reader, Writer  2.    Stream: 处 理字节流  3.    Reader/Writer: 处理字符,通用Unicode  4.      5.    // 从标准输入设备读数据  6.    1. 用System.in的BufferedInputStream()读取字节  7.        int b = System.in.read();  8.          System.out.println("Read data: " + (char)b);  // 强 制转换为字符  9.    2. BufferedReader 读取文本  10.        如果从Stream转成Reader,使用 InputStreamReader类  11.        BufferedReader is = new BufferedReader(new   12.          InputStreamReader(System.in));  13.          String inputLine;  14.          while ((inputLine = is.readLine()) != null) {  15.              System.out.println(inputLine);  16.              int val = Integer.parseInt(inputLine);  // 如果inputLine为整数  17.        }  18.          is.close();  19.          20.    // 向标准输出设备写数据  21.    1. 用System.out的println()打印数据  22.    2. 用PrintWriter打印  23.        PrintWriter pw = new PrintWriter(System.out);  24.          pw.println("The answer is " + myAnswer + " at this time.");  25.          26.    // Formatter类  27.    格 式化打印内容  28.    Formatter fmtr = new Formatter();  29.    fmtr.format("%1$04d - the year of %2$f", 1951, Math.PI);  30.    或 者System.out.printf();或者System.out.format();        31.      32.    // 原始扫描  33.    void doFile(Reader is) {  34.        int c;  35.        while ((c = is.read()) != -1) {  36.            System.out.println((char)c);  37.        }  38.    }    39.      40.    // Scanner扫描  41.    Scanner 可以读取File, InputStream, String, Readable  42.    try {  43.        Scanner scan = new Scanner(new File("a.txt"));  44.        while (scan.hasNext()) {  45.            String s = scan.next();  46.        }  47.        } catch (FileNotFoundException e) {  48.            e.printStackTrace();  49.        }  50.    }  51.      52.    // 读取文件  53.    BufferedReader is = new BufferedReader(new FileReader("myFile.txt"));  54.    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bytes.bat"));  55.    is.close();  56.    bos.close();  57.      58.    // 复制文件  59.    BufferedIutputStream is = new BufferedIutputStream(new FileIutputStream("oldFile.txt"));  60.    BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream("newFile.txt"));  61.    int b;  62.    while ((b = is.read()) != -1) {  63.        os.write(b);  64.    }  65.    is.close();  66.    os.close();  67.      68.    // 文件读入字符串  69.    StringBuffer sb = new StringBuffer();  70.    char[] b = new char[8192];  71.    int n;  72.    // 读一个块,如果有字符,加入缓冲区  73.    while ((n = is.read(b)) > 0) {  74.        sb.append(b, 0, n);  75.    }  76.    return sb.toString();  77.      78.    // 重定向标准流  79.    String logfile = "error.log";  80.    System.setErr(new PrintStream(new FileOutputStream(logfile)));  81.      82.    // 读写不同字符集文本  83.    BufferedReader chinese = new BufferedReader(new InputStreamReader(new FileInputStream("chinese.txt"), "ISO8859_1"));  84.    PrintWriter standard = new PrintWriter(new OutputStreamWriter(new FileOutputStream("standard.txt"), "UTF-8"));  85.      86.    // 读取二进制数据  87.    DataOutputStream os = new DataOutputStream(new FileOutputStream("a.txt"));  88.    os.writeInt(i);  89.    os.writeDouble(d);  90.    os.close();  91.      92.    // 从指定位置读数据  93.    RandomAccessFile raf = new RandomAccessFile(fileName, "r");  // r表示已 只读打开  94.    raf.seek(15);  // 从15开始读  95.    raf.readInt();  96.    raf.radLine();  97.      98.    // 串行化对象  99.    对象串 行化,必须实现Serializable接口  100.    // 保存 数据到磁盘  101.    ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(FILENAME)));  102.    os.writeObject(serialObject);  103.    os.close();  104.    // 读出数据  105.    ObjectInputStream is = new ObjectInputStream(new FileInputStream(FILENAME));  106.    is.readObject();  107.    is.close();  108.      109.    // 读写Jar或Zip文档  110.    ZipFile zippy = new ZipFile("a.jar");  111.    Enumeration all = zippy.entries();  // 枚举值列出所有文件清单  112.    while (all.hasMoreElements()) {  113.        ZipEntry entry = (ZipEntry)all.nextElement();  114.        if (entry.isFile())  115.            println("Directory: " + entry.getName());  116.              117.        // 读写文件  118.        FileOutputStream os = new FileOutputStream(entry.getName());  119.        InputStream is = zippy.getInputStream(entry);  120.        int n = 0;  121.        byte[] b = new byte[8092];  122.        while ((n = is.read(b)) > 0) {  123.            os.write(b, 0, n);  124.            is.close();  125.            os.close();  126.        }  127.    }  128.      129.    // 读写gzip文档  130.    FileInputStream fin = new FileInputStream(FILENAME);  131.    GZIPInputStream gzis = new GZIPInputStream(fin);  132.    InputStreamReader xover = new InputStreamReader(gzis);  133.    BufferedReader is = new BufferedReader(xover);  134.    String line;  135.    while ((line = is.readLine()) != null)  136.        System.out.println("Read: " + line);   11. 目录和文件操作Java代码 1.    // 获取文件信息  2.    exists(): 如 果文件存在,返回true  3.    getCanonicalPath(): 获 取全名  4.    getName(): 文件名  5.    getParent(): 父 目录  6.    canRead(): 如果文件可读,返回true  7.    canWrite(): 如 果文件可写,返回true  8.    lastModified(): 文 件更新时间  9.    length(): 文件大小  10.    isFile(): 如 果是文件,返回true  11.    ifDirectory(): 如 果是目录,返回true  12.    要 调用文件的这些方法,必须  13.    File f = new File(fileName);  14.      15.    // 创建文件  16.    File f = new File("c:\\test\\mytest.txt");  17.    f.createNewFile();  // 创建mytest.txt文件到test目录下  18.      19.    // 修改文件名  20.    File f = new File("c:\\test\\mytest.txt");  21.    f.renameTo(new File("c:\\test\\google.txt"));  22.    把 mytest.txt修改成google.txt  23.      24.    // 删除文件  25.    File f = new File("c:\\test\\mytest.txt");  26.    f.delete();  27.      28.    // 临时文件  29.    File f = new File("C:\\test");  // 指定一个文件夹  30.    // 在test文件夹中创建foo前缀,tmp后缀的临时文件  31.    File tmp = File.createTempFile("foo", "tmp", f);   32.    tmp.deleteOnExit();  // 在程序结束时删除该临时文件  33.      34.    // 更改文件属性  35.    setReadOnly(): 设 置为只读  36.    setlastModified(): 设置最后更改时间  37.      38.    // 列出当前文件夹的文件列表  39.    String[] dir = new java.io.File(".").list();  40.    java.util.Arrays.sort(dir);  41.    for (int i = 0; i < dir.length; i++) {  42.        System.out.println(dir[i]);  43.    }  44.      45.    // 过滤文件列表  46.    class OnlyJava implements FilenameFilter {  47.        public boolean accept(File dir, String s) {  48.            if (s.endsWith(".java") || s.endsWith(".class") || s.endsWith(".jar"))  49.                return true;  50.        }  51.    }  52.      53.    // 获取根目录  54.    File[] rootDir = File.listRoots();  55.    for (int i = 0; i < rootDir.length; i++) {  56.        System.out.println(rootDir[i]);  57.    }  58.      59.    // 创建新目录  60.    new File("/home/ian/bin").mkdir();  // 如果"/home/ian"存在,则可以创建bin目录  61.    new File("/home/ian/bin").mkdirs();  // 如果"/home/ian"不存在,会创建所有的目录   12. 国际化和本地化Java代码 1.    // I18N资源  2.    ResourceBundle rb = ResourceBundle.getBundle("Menus");  3.    String label = rb.getString("exit.label");  4.    // ResourceBundle相当于名值对,获取Menus按钮的区域属性  5.    Menus_cn.properties: 不 同区域的属性文件  6.      7.    // 列出有效区域  8.    Locale[] list = Locale.getAvailableLocales();  9.      10.    // 指定区域  11.    Locale cnLocale = Locale.CHINA;  12.      13.    // 设置默认区域  14.    Locale.setDefault(Locale.CHINA);  15.      16.    // 格式化消息  17.    public class MessageFormatDemo {  18.        static Object[] data = {  19.            new java.util.Date(),  20.            "myfile.txt",  21.            "could nto be opened"  22.        };  23.        public static void main(String[] args) {  24.            String result = MessageFormat.format("At {0,time} on {0,date}, {1} {2}.", data);  25.            System.out.println(result);  26.        }  27.    }  28.    输 出: At 10:10:08 on 2009-6-18, myfile.txt could nto be opened.  29.      30.    // 从资源文件中读消息  31.    Widgets.properties 在com.sean.cook.chap11下  32.    ResourceBundle rb = ResourceBundle.getBundle("com.sean.cook.chap11.Widgets");  33.    String propt = rb.getString("filedialogs.cantopen.string");  34.    String result = MessageFormat.format(rb.getString("filedialogs.cantopen.format"), data);   13. 网络客户端Java代码 1.    // 访问服务器  2.    Socket socket = new Socket("127.0.0.1", 8080);  3.    // todo something  4.    socket.close();  5.      6.    // 查找网络地址  7.    InetAddress.getByName(hostName).getHostAddress()); // 根据主机名得到IP地址  8.    InetAddress.getByName(ipAddr).getHostName()); // 根据IP地址得到主机名  9.      10.    // 连接具体异常  11.    UnknownHostException  12.    NoRouteToHostException  13.    ConnectException  14.      15.    // Socket读写文本数据  16.    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  17.    String remoteTime = in.readline();  18.    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);  19.    out.print("send message to client \r\n");  20.    out.flush();  21.      22.    // Socket读写二进制数据  23.    DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));  24.    long remoteTime = (long)(in.readUnsignedByte() << 24);  25.    DataOutputStream out = new DataOutputStream(socket.getOutputStream(), true);  26.      27.    // Socket读写串行化数据  28.    ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));  29.    Object o = in.readObject();  30.    if (o instanceof Date) // 验证对象类型  31.    ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream(), true);  32.      33.    // UDP数据报  34.    private final static int PACKET_SIZE = 1024;  35.          36.    String host = "EV001B389673DE";  37.    InetAddress serverAddr = InetAddress.getByName(host);  38.    DatagramSocket socket = new DatagramSocket();  39.    byte[] buffer = new byte[PACKET_SIZE]; // 分配数据缓冲空间  40.    DatagramPacket packet = new DatagramPacket(buffer, PACKET_SIZE, serverAddr, 8080);  41.    packet.setLength(PACKET_SIZE-1); // 设置数据长度  42.    socket.send(packet);  43.    socket.receive(packet); // 接收数据   14. 服务器端: Socket Java代码 1.    // 创建ServerSocket  2.    ServerSocket serverSocket;  3.    Socket clientSocket;  4.              5.    serverSocket = new ServerSocket(9999);  6.    while ((clientSocket = serverSocket.accept()) != null) {  7.        System.out.println("Accept from client " + s.getInetAddress());  8.        s.close();  9.    }  10.      11.    // 监听内部网  12.    public static final short PORT = 9999;  13.    public static final String INSIDE_HOST = "acmewidgets-inside"; // 网络接口名  14.    public static final int BACKLOG = 10; // 待发数  15.    serverSocket = new ServerSocket(PORT, BACKLOG, InetAddress.getByName(INSIDE_HOST));  16.      17.    // 返回相应对象  18.    ServerSocket serverSocket =  new ServerSocket(9999);;  19.    Socket clientSocket;  20.    BufferedReader in = null;  21.    PrintWriter out = null;  22.    while (true) {  23.        clientSocket = serverSocket.accept();  24.        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "8859_1"));  25.        out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "8859_1"), true);  26.        String echoLine;  27.        while ((echoLine = in.readLine()) != null) {  28.            System.out.println("Read " + echoLine);  29.            out.print(echoLine + "\r\n");  30.        }  31.    }  32.    以 上例子返回字符串,如果返回二进制,则使用DataOutputStream;返回对象,使用ObjectOutputStream  33.      34.    // 处理多客户端  35.    需要 把接收数据的处理放入多线程中  36.    public class EchoServerThreaded {  37.        public static final int ECHOPORT = 7;  38.        public static final int NUM_THREADS = 4;  39.      40.        public static void main(String[] av) {  41.            new EchoServerThreaded(ECHOPORT, NUM_THREADS);  42.        }  43.      44.        public EchoServerThreaded2(int port, int numThreads) {  45.            ServerSocket servSock;  46.            Socket clientSocket;  47.            try {  48.                servSock = new ServerSocket(ECHOPORT);  49.            } catch(IOException e) {  50.                throw new RuntimeException("Could not create ServerSocket " + e);  51.            }  52.            for (int i = 0; i < numThreads; i++) {  53.                new Handler(servSock, i).start();  54.            }  55.        }  56.    }  57.    class Handler extends Thread {  58.        ServerSocket servSock;  59.        int threadNumber;  60.      61.        Handler(ServerSocket s, int i) {  62.            super();  63.            servSock = s;  64.            threadNumber = i;  65.            setName("Thread " + threadNumber);  66.        }  67.      68.        public void run() {  69.            while (true) {  70.                try {  71.                    System.out.println(getName() + " waiting");  72.                    Socket clientSocket;  73.                    synchronized (servSock) {  74.                        clientSocket = servSock.accept();  75.                    }  76.                    System.out.println(getName() + " starting, IP=" + clientSocket.getInetAddress());  77.                    BufferedReader is = new BufferedReader(new InputStreamReader(  78.                        clientSocket.getInputStream()));  79.                    PrintStream os = new PrintStream(clientSocket.getOutputStream(), true);  80.                    String line;  81.                    while ((line = is.readLine()) != null) {  82.                        os.print(line + "\r\n");  83.                        os.flush();  84.                    }  85.                    System.out.println(getName() + " ENDED ");  86.                    clientSocket.close();  87.                } catch (IOException ex) {  88.                    System.out.println(getName() + ": IO Error on socket " + ex);  89.                    return;  90.                }  91.            }  92.        }  93.    }  94.      95.    // 使用SSL和JSSE保护Web服务器  96.    SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();  97.    ServerSocket serverSocket = ssf.createServerSocket(8080);  98.      99.    // Log4j  100.    Level 级别: DEBUG < INFO < WARN < ERROR < FATAL < OFF  101.    Appender: 输 出信息  102.    ConsoleAppender: 输出控制台 System.out  103.      104.    // 找到网络接口  105.    Enumeration list = NetworkInterface.getNetworkInterfaces();  106.    while (list.hasMoreElements()) {  107.        NetworkInterface iface = (NetworkInterface)list.nextElement();  108.        System.out.println(iface.getDisplayName());  109.        Enumeration addrs = iface.getInetAddresses();  110.        while (addrs.hasMoreElements()) {  111.            InetAddress addr = (InetAddress)addrs.nextElement();  112.            System.out.println(addr);  113.        }  114.    }   15. Java MailJava代码 1.    // 发送Mail  2.    protected String msgRecIp = "hxydream@163.com";  3.    protected String msgSubject = "babytree";  4.    protected String msgCc = "nobody@erewhon.com";  5.    protected String msgBody = "test body";  6.    protected Session session;  7.    protected Message msg;  8.          9.    public void doSend() {  10.        // 创建属性文件  11.        Properties props = new Properties();  12.        props.put("mail.smtp.host", "mailhost");  13.        // 创建Session对象  14.        session = Session.getDefaultInstance(props, null);  15.        session.setDebug(true);  16.        msg = new MimeMessage(session); // 创建邮件  17.        msg. setFrom(new InternetAddress("nobody@host.domain"));  18.        InternetAddress toAddr = new InternetAddress(msgRecIp);  19.        msg.addRecipient(Message.RecipientType.TO, toAddr);  20.        InternetAddress ccAddr = new InternetAddress(msgCc);  21.        msg.addRecipient(Message.RecipientType.CC, ccAddr);  22.        msg.setSubject(msgSubject);  23.        msg.setText(msgBody);   24.        Transport.send(msg);   25.    }  26.      27.    // 发送MIME邮件  28.    Multipart mp = new MimeMultipart();  29.    BodyPart textPart = new MimeBodyPart();  30.    textPart.setText(message_body);  // 设置类型"text/plain"  31.    BodyPart pixPart = new MimeBodyPart();  32.    pixPart.setContent(html_data, "text/html");  33.    mp.addBodyPart(textPart);  34.    mp.addBodyPart(pixPart);  35.    mesg.setContent(mp);  36.    Transport.send(mesg);  37.      38.    // 读Mail  39.    Store store = session.getStore(protocol);  40.    store.connect(host, user, password);  41.    Folder rf;  42.    rf = store.getFolder(root);  43.    rf = store.getDefaultFolder();  44.    rf.open(Folder.READ_WRITE);   16. 数据库访问 Java代码 1.    // JDO  2.    Properties p = new Properties();  3.    p.load(new FileInputStream("jdo.properties"));  4.    PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(p);  5.    PersistenceManager pm = pmf.getPersistenceManager();  6.    // 提交数据  7.    pm.currentTransaction().begin();  8.    if (o instanceof Collection) {  9.        pm.makePersistentAll((Collection) o);  10.    } else {  11.        pm.makePersistent(o);  12.    }  13.    pm.currentTransaction().commit();  14.    pm.close();  15.    // 取出数据  16.    Object[] data = new Object[3];  17.    pm.retrieveAll(data);  18.    for (int i = 0; i < data.length; i++) {  19.        System.out.println(data[i]);  20.    }  21.    pm.close();  22.      23.    // 数据操作  24.    Class clz = Class.forName("oracle.jdbc.driver.OracleDriver");  25.    String dbUrl = "jdbc:oracle:thin:@192.168.0.23:1521#:nms";  26.    Connection conn = DriverManager.getConnection(dbUrl, "su", "1234");  27.    Statement stmt = conn.createStatement();  28.    ResultSet rs = stmt.executeQuery("select * from pmtable");  29.    while (rs.next()) {  30.        String name = rs.getString(1);  31.        String otherName = rs.getString("name");  32.    }  33.      34.    // 使用PreparedStatement提高性能,除了查询,都使用executeUpdate执行操作   35.    PreparedStatement pstmt = conn.prepareStatement("select * from pmtable where name = ?");  36.    pstmt.setString(1, "sean");  37.    ResultSet rs = pstmt.executeQuery();  38.      39.    // 调用存储过程             40.    CallableStatement cs = conn.prepareCall("{ call ListDefunctUsers }");  41.    ResultSet rs = cs.executeQuery();  42.              43.    // 显示数据库表信息   44.    DatabaseMetaData meta = conn.getMetaData();  45.    meta.getDatabaseProductName();  46.    meta.getDatabaseProductVersion();  47.    meta.getDefaultTransactionIsolation();    17. XML    SAX: 在读取文档提取相应的标记事件(元素起始、元素结束、文档起始)    DOM: 在内存中构造与文档中元素相应的树,可以遍历、搜索、修改    DTD: 验证文档是否正确    JAXP: 用于XML处理的Java API    Castor: 开源项目,用于Java对象与XML映射Java代码 1.    // 从对象中生成XML  2.    private final static String FILENAME = "serial.xml";  3.    public static void main(String[] args) throws IOException {  4.        String a = "hard work and best callback";  5.        new SerialDemoXML().write(a);  6.        new SerialDemoXML().dump();  7.    }  8.    public void write(Object obj) throws IOException {  9.        XMLEncoder os = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(FILENAME)));  10.        os.writeObject(obj);  11.        os.close();  12.    }  13.    public void dump() throws IOException {  14.        XMLDecoder out = new XMLDecoder(new BufferedInputStream(new FileInputStream(FILENAME)));  15.        System.out.println(out.readObject());  16.        out.close();  17.    }  18.    serial.xml 格式内容如下:  19.    <?xml version="1.0" encoding="UTF-8"?>   20.    <java version="1.6.0_02" class="java.beans.XMLDecoder">   21.        <string>hard work and best callback</string>   22.    </java>  23.    控 制台输出  24.    hard work and best callback  25.      26.    // XSLT转换XML  27.    XSLT 可以用来对输出格式进行各种控制  28.    Transformer tx = TransformerFactory.newInstance().newTransformer(new StreamSource("people.xml"));  29.    tx.transform(new StreamSource("people.xml"), new StreamResult("people.html"));  30.      31.    // 用SAX解析XML - 主要用于查找关键元素,不用全文遍历  32.    public SaxLister() throws SAXException, IOException {  33.        XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");  34.        parser.setContentHandler(new PeopleHandler());  35.        parser.parse("C:\\StudySource\\javacooksrc2\\xml\\people.xml");  36.    }  37.    class PeopleHandler extends DefaultHandler {  38.        boolean parent = false;  39.        boolean kids = false;  40.        public void startElement(String nsURI, String localName, String rawName, Attributes attr) throws SAXException {  41.            System.out.println("startElement: " +  localName + "," + rawName);  42.            if (rawName.equalsIgnoreCase("name"))  43.                parent = true;  44.            if (rawName.equalsIgnoreCase("children"))  45.            kids = true;  46.        }  47.        public void characters(char[] ch, int start, int length) {  48.            if (parent) {  49.                System.out.println("Parent: " + new String(ch, start, length));  50.                parent = false;  51.            } else if (kids) {  52.                System.out.println("Children: " + new String(ch, start, length));  53.                kids = false;  54.            }  55.        }  56.        public PeopleHandler() throws SAXException {  57.            super();  58.        }  59.    }  60.      61.    // DOM解析XML - 遍历整个树  62.    String uri = "file:" + new File("C:\\StudySource\\javacooksrc2\\xml\\people.xml").getAbsolutePath();  63.    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  64.    DocumentBuilder builder = factory.newDocumentBuilder();  65.    Document doc = builder.parse(uri);  66.    NodeList nodes = doc.getChildNodes();  67.    for (int i = 0; i < nodes.getLength(); i++) {  68.        Node n = nodes.item(i);  69.        switch (n.getNodeType()) {  70.        case Node.ELEMENT_NODE:  71.            // todo  72.            break;  73.        case Node.TEXT_NODE:  74.            // todo  75.            break;  76.        }  77.    }  78.      79.    // 使用DTD或者XSD验证  80.    定 义好DTD或XSD文件  81.    XmlDocument doc = XmlDocument.createXmlDocument(uri, true);  82.      83.    // 用DOM生成XML  84.    DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();  85.    DocumentBuilder parser = fact.newDocumentBuilder();  86.    Document doc = parser.newDocument();  87.    Node root = doc.createElement("Poem");  88.    doc.appendChild(root);  89.    Node stanza = doc.createElement("Stanza");  90.    root.appendChild(stanza);  91.    Node line = doc.createElement("Line");  92.    stanza.appendChild(line);  93.    line.appendChild(doc.createTextNode("Once, upon a midnight dreary"));  94.    line = doc.createElement("Line");  95.    stanza.appendChild(line);  96.    line.appendChild(doc.createTextNode("While I pondered, weak and weary"));    18. RMIJava代码 1.    a. 定义 客户端与服务器之间的通信接口  2.    public interface RemoteDate extends Remote {  3.        public Date getRemoteDate() throws RemoteException;  4.        public final static String LOOKUPNAME = "RemoteDate";  5.    }  6.      7.    b. 编 写RMI服务器  8.    public class RemoteDateImpl extends UnicastRemoteObject implements RemoteDate {  9.        public RemoteDateImpl() throws RemoteException {  10.            super();  11.        }  12.        public Date getRemoteDate() throws RemoteException {  13.            return new Date();  14.        }   15.    }  16.    RemoteDateImpl im = new RemoteDateImpl();  17.    System.out.println("DateServer starting...");  18.    Naming.rebind(RemoteDate.LOOKUPNAME, im);  19.    System.out.println("DateServer ready.");  20.      21.    c. 运 行rmic生成stub  22.    javac RemoteDateImpl.java  23.    rmic RemoteDateImpl  24.      25.    d. 编 写客户端  26.    netConn = (RemoteDate)Naming.lookup(RemoteDate.LOOKUPNAME);  27.    Date today = netConn.getRemoteDate();  28.    System.out.println(today.toString());  29.      30.    e. 确 保RMI注册表运行  31.    rmiregistry  32.      33.    f. 启 动服务器  34.    java RemoteDateImpl  35.          36.    g. 运 行客户端  37.    java DateClient    19. 包和包装机制    jar cvf /tmp/test.jar .  // 当前目录压缩到test.jar中    jar xvf /tmp/test.jar  // 把test.jar解压到当前目录    从指定class运行jar文件    a. Main-Class: HelloWord  // 注意中间有一个空格    b. jar cvmf manifest.mf hello.jar HelloWorld.class    c. java -jar hello.jar 20. Java线程Java代码 1.    // 停止线程 - 不要使用stop()方法  2.    private boolean done = false;  3.    public void run() {  4.        while (!done) {  5.            //todo  6.        }  7.    }  8.    public void shutDown() {  9.        done = true;  10.    }  11.    可 以调用shutDown()方法来结束线程  12.      13.    // 如果读取IO的时候出现堵塞,那么可以使用下面方法  14.    public void shutDown() throws IOException {  15.        if (io != null)   16.            io.close();  17.    }  18.      19.    // 启动一线程,等待控制台输入,使用join()方法来暂停当前线程,直到其他线程调用  20.    Thread t = new Thread() {  21.        public void run() {  22.            System.out.println("Reading");  23.            try {  24.                System.in.read();  25.            } catch (IOException e) {  26.                System.err.println(e);  27.            }  28.            System.out.println("Thread finished.");  29.        }  30.    };  31.    System.out.println("Starting");  32.    t.start();  33.    System.out.println("Joining");  34.    try {  35.        t.join();  36.    } catch (InterruptedException e) {  37.        System.out.println("Who dares imterrupt my sleep?");  38.    }  39.    System.out.println("Main finished.");  40.      41.    // 加锁保证同步  42.    Lock lock = new ReentrantLock();  43.    try {  44.        lock.lock();  45.        // todo  46.    } finally {  47.        lock.unlock();     48.    }  49.      50.    线 程通信wait(), notify(), notifyAll()  51.    生产者-消费者模式  52.    Executors    21. 内省或“命令类的类”Java代码 1.    // 反射  2.    Class c = Class.forName("java.lang.String");  3.    Constructor[] cons = c.getConstructors();  4.    for (int i = 0; i < cons.length; i++) {  5.        System.out.println(cons[i].toString());  6.    }  7.    Method[] meths = c.getMethods();  8.    for (int i = 0; i < meths.length; i++) {  9.        System.out.println(meths[i].toString());  10.    }  11.      12.    // 动态装载类  13.    Class c = Class.forName("java.lang.String");  14.    Object obj = c.newInstance();  15.      16.    // 通过反射调用类的方法  17.    class X {  18.        public void master(String s) {  19.            System.out.println("Working on \"" + s + "\"");  20.        }  21.    }  22.    Class clx = X.class;  23.    Class[] argTypes = {String.class};  24.    Method worker = clx.getMethod("master", argTypes);  25.    Object[] theData = {"Chocolate chips"};  26.    worker.invoke(new X(), theData);  27.    输 出: Working on "Chocolate chips"    22. Java与其他语言的结合Java代码 1.    // 执行CMD命令,在Eclipse控制台输出  2.    Process p = Runtime.getRuntime().exec("C:/StudySource/ver.cmd");  3.    p.waitFor(); // 等待命令执行完  4.    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));  5.    String s;  6.    while ((s = br.readLine()) != null)  7.        System.out.println(s);  8.          9.    // 调用Jython - 计算22.0/7  10.    BSFManager manager = new BSFManager();  11.    String[] fntypes = {".py"};  12.    manager.registerScriptingEngine("jython", "org.apache.bsf.engines.jython.JythonEngine", fntypes);  13.    Object r = manager.eval("jython", "testString", 0, 0, "22.0/7");  14.    System.out.println("Result type is " + r.getClass().getName());  15.    System.out.println("Result value is " + r);  
0 0
原创粉丝点击