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