`
renjie120
  • 浏览: 237707 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D11bba82-ec4a-3d31-a3c0-c51130c62f1c
Java应用集锦
浏览量:22911
社区版块
存档分类
最新评论

java应用集锦1:序列化 操作xml 常见IO

    博客分类:
  • java
阅读更多

转载请注明出处: http://renjie120.iteye.com/

 

使用java的一些知识的整理,以后在这里方便经常查找.

本文涉及如下四个方面:

1.不借助其他包,对xml文件的解析

2.java序列化和反序列化

3.读取java的property属性配置文件

4.常见IO方法搜集

 

1.不借助其他包,对xml文件的解析

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomUtil {
	protected static Log log = LogFactory.getLog("DomUtil");
	public static void main(String args[]) {
		Document doc;
		Element root;
		String elementname;
		String filename;
		try {
			filename = System.getProperty("user.dir");
			filename = filename + "/WebRoot/WEB-INF/classes/struts.xml";

			doc = getXmlDocument(filename);
			// 获取xml文档的根节点
			// root = getRoot(doc);
			// System.out.println(root.getElementsByTagName("action").getLength());
			// elementname = root.getNodeName();//获得根节点名称
			// System.out.println("输出根节点名称:" + elementname);
			// 打印根节点的属性和值
			// printAllAttributes(root);
			// 打印该文档全部节点
			// System.out.println("打印全部节点");
			// printElement(root, 0);
			NodeList packages = doc.getElementsByTagName("package");
			if (packages != null && packages.getLength() > 0) {
				for (int i = 0; i < packages.getLength(); i++) {
					Node _package = packages.item(i);
					NodeList actions = _package.getChildNodes();
					for (int j = 0; j < actions.getLength(); j++) {
						Node _action = actions.item(j);
						if (_action.getNodeName().equals("action")) {
							if (getAttribute(_action,"name").equals("hello")) {
								NodeList results = _action.getChildNodes();
								for (int k = 0; k < results.getLength(); k++) {
									Node _result = results.item(k);
									if(_result.getNodeName().equals("result")&&getAttribute(_result,"name").equals("success"))
									System.out.println(_result.getTextContent());
								}
							}
						}
					}
				}
			}
		} catch (Exception exp) {
			exp.printStackTrace();
		}
	}

	/**
	 * 得到文档对象的根节点.
	 * @param doc 文档对象
	 * @return
	 */
	public static Element getRoot(Document doc){
		return doc.getDocumentElement();
	}
	
	/**
	 * 得到指定节点的指定属性值.
	 * @param node
	 * @param attrName
	 * @return
	 */
	public static String getAttribute(Node node,String attrName){
		if(node.hasAttributes()){
			Node _node = node.getAttributes().getNamedItem(attrName);
			if(_node!=null)
				return _node.getNodeValue();
			else{
				return "";
			}
		}
		else
			return "";
	}
	
	/**
	 * 得到指定节点的文本内容.
	 * @param node
	 * @return
	 */
	public static String getText(Node node){
		return node.getTextContent();
	}
	
	/**
	 * 根据xml文件地址得到xml对象.
	 * @param fileName xml地址
	 * @return
	 */
	public static Document getXmlDocument(String fileName){
		Document doc = null;
		DocumentBuilderFactory factory;
		DocumentBuilder docbuilder;

		FileInputStream in;
		try {
			in = new FileInputStream(fileName);
			// 解析xml文件,生成document对象
			factory = DocumentBuilderFactory.newInstance();
			factory.setValidating(false);
			docbuilder = factory.newDocumentBuilder();
			doc = docbuilder.parse(in);			
		} catch (Exception e) {
			log.error("DomUtil---getXmlDocument", e);
		}
		return doc;
	}
	
	/**
	 *  根据xml文件流地址得到xml对象.
	 * @param in
	 * @return
	 */
	public static Document getXmlDocument(InputStream in){
		Document doc = null;
		DocumentBuilderFactory factory;
		DocumentBuilder docbuilder;
		try {
			// 解析xml文件,生成document对象
			factory = DocumentBuilderFactory.newInstance();
			factory.setValidating(false);
			docbuilder = factory.newDocumentBuilder();
			doc = docbuilder.parse(in);			
		} catch (Exception e) {
			log.error("DomUtil---getXmlDocument", e);
		}
		return doc;
	}
	
	/**
	 * 打印指定节点的全部属性.
	 * @param elem 节点对象
	 */
	public static void printAllAttributes(Element elem) {
		NamedNodeMap attributes;//根节点所有属性
		int i, max;
		String name, value;
		Node curnode;

		attributes = elem.getAttributes();
		max = attributes.getLength();

		for (i = 0; i < max; i++) {
			curnode = attributes.item(i);
			name = curnode.getNodeName();
			value = curnode.getNodeValue();
			System.out.println("输出节点名称和值:" + name + " = " + value);
		}
	}
	
	/**
	 * 得到指定节点的所有属性,返回结果是一个map对象.
	 * @param elem 节点对象
	 * @return 
	 */
	public static Map getAllAttributes(Element elem) {
		Map map = new HashMap();
		NamedNodeMap attributes;//根节点所有属性
		int i, max;
		String name, value;
		Node curnode;

		attributes = elem.getAttributes();
		max = attributes.getLength();

		for (i = 0; i < max; i++) {
			curnode = attributes.item(i);
			name = curnode.getNodeName();
			value = curnode.getNodeValue();
			map.put(name, value);
		}
		return map;
	}

	/**
	 * 打印节点的所有节点的名称和值.
	 * @param elem 节点对象
	 * @param depth 深度
	 */
	public static void printElement(Element elem, int depth) {
		String elementname;
		NodeList children;
		int i, max;
		Node curchild;
		Element curelement;
		String nodename, nodevalue;

		// elementname = elem.getnodename();
		// 获取输入节点的全部子节点
		children = elem.getChildNodes();

		// 按一定格式打印输入节点
		for (int j = 0; j < depth; j++) {
			//System.out.print(" ");
		}
		printAllAttributes(elem);

		// 采用递归方式打印全部子节点
		max = children.getLength();
		System.out.println("输出子节点的长度:" + elem.getNodeName() + ":::" + max);
		//输出全部子节点
		for (int j = 0; j < max; j++) {
			System.out.println("tt:" + children.item(j));
		}

		for (i = 0; i < max; i++) {

			curchild = children.item(i);

			// 递归退出条件
			if (curchild instanceof Element) {
				curelement = (Element) curchild;
				printElement(curelement, depth + 1);
			} else {
				nodename = curchild.getNodeName();
				nodevalue = curchild.getNodeValue();

				for (int j = 0; j < depth; j++) {
					System.out.print(" ");
					System.out.println(nodename + " = " + nodevalue);
				}
			}
		}
	}
}

 

2.java序列化和反序列化

/**
	 * 序列化对象保存到本地文件.
	 * @param obj 对象
	 * @param fileName 文件名
	 */
	public static void saveObjectToFile(Object obj, String fileName) {
		try {
			ObjectOutputStream out = new ObjectOutputStream(
					new FileOutputStream(fileName));
			out.writeObject(obj);
			out.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 反序列化.
	 * @param fileName 加载对象的文件名
	 * @return
	 */
	public static Object getObjectFromFile(String fileName){
		Object result = new Object();
		try {
			ObjectInputStream in = new ObjectInputStream(new FileInputStream(
					fileName));
			result = in.readObject();
			in.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	

 

3.java读取属性文件:

    private static final String CONFIG_FILE="/application.properties";   
    private static Properties prop;   
    private static File mFile;   
       

     static {
        // getResourceAsStream的参数"/application.properties"表示以当前类的包的根路径为基准路径   
        InputStream inputStream = ConfigHelper.class.getResourceAsStream(CONFIG_FILE);
        prop = new Properties();
        try {
            prop.load(inputStream);
            inputStream.close();
        }
        catch (IOException e) {
            System.out.println("获取系统属性文件异常:");
        }
    }
       
    /**  
     * 根据key获取属性培植文件中对应的value  
     * @param key  
     * @return  
     */  
    public static String getProperty(String key){   
        String value = prop.getProperty(key);   
        try{   
            value = new String(value.getBytes("ISO-8859-1"),"GBK");   
        }catch(UnsupportedEncodingException e){   
            System.out.println (e.getMessage());   
        }   
        return value;   
    }   

 下面是更加详尽的六种方式:

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

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

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

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

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

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

4.下面和IO相关:

  	/**
	 * 删除一个文件.
	 * @param filename 文件名.
	 * @throws IOException
	 */
	public static void deleteFile(String filename){
		File file = new File(filename); 
		file.deleteOnExit(); 
	} 
    
     /**
     * 复制文件.
     * @param srcFileName
     * @param desFileName
     */
    public static void copyFile(String srcFileName, String desFileName) {
        try {
            FileChannel srcChannel = new FileInputStream(srcFileName)
                    .getChannel();

            FileChannel dstChannel = new FileOutputStream(desFileName)
                    .getChannel();

            dstChannel.transferFrom(srcChannel, 0, srcChannel.size());
            
            srcChannel.close();
            dstChannel.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }        

        /**
	 * 对指定文件添加字符串内容.
	 * @param fileName
	 * @param contant
	 */
	public static void appendToFile(String fileName, String contant) {
		PrintWriter out;
		try {
			out = new PrintWriter(new BufferedWriter(new FileWriter(fileName,true)));
			out.print(contant);
			out.close();
		} catch (IOException e) {
			System.out.println("读写文件出现异常!");
		} catch (Exception e) {
			System.out.println("出现异常");
		}
	}

     /**
	 * 读取文件为字节数组
	 * @param filename
	 * @return
	 * @throws IOException
	 */
	public static byte[] readFile(String filename) throws IOException {
		File file = new File(filename);
		if (filename == null || filename.equals("")) {
			throw new NullPointerException("无效的文件路径");
		}
		long len = file.length();
		byte[] bytes = new byte[(int) len];
		BufferedInputStream bufferedInputStream = new BufferedInputStream(
				new FileInputStream(file));
		int r = bufferedInputStream.read(bytes);
		if (r != len)
			throw new IOException("读取文件不正确");
		bufferedInputStream.close();
		return bytes;
	}

	/**
	 * 将字节数组写入文件 
	 * @param data byte[]
	 * @throws IOException
	 */
	public static void writeFile(byte[] data, String filename)
			throws IOException {
		File file = new File(filename);
		BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
				new FileOutputStream(file));
		bufferedOutputStream.write(data);
		bufferedOutputStream.close();
	}

	/**
	 * 将字符数组转换为字节数组
	 * @param chars
	 * @return
	 */
	public byte[] getBytes(char[] chars) {
		Charset cs = Charset.forName("UTF-8");
		CharBuffer cb = CharBuffer.allocate(chars.length);
		cb.put(chars);
		cb.flip();
		ByteBuffer bb = cs.encode(cb);

		return bb.array();
	}

	/**
	 * 字节数组转换为字符数组
	 * @param bytes
	 * @return
	 */
	public char[] getChars(byte[] bytes) {
		Charset cs = Charset.forName("UTF-8");
		ByteBuffer bb = ByteBuffer.allocate(bytes.length);
		bb.put(bytes);
		bb.flip();
		CharBuffer cb = cs.decode(bb);
		return cb.array();
	}

	/**
	 * 读取指定文件的内容,返回文本字符串	 
	 * @param fileName     文件名
	 * @param linkChar    换行符号
	 * @return
	 */
	public static String readFile(String fileName, String linkChar) {
		StringBuffer sb = new StringBuffer();
		BufferedReader in;
		String result = "";
		try {
			// 定义文件读的数据流
			in = new BufferedReader(new FileReader(fileName));
			String s;
			while ((s = in.readLine()) != null) {
				sb.append(s);
				// 换行符号默认是13!!
				if (linkChar == null || "".equals(linkChar))
					sb.append((char) 13);
				else
					sb.append(linkChar);
			}
			in.close();
			int i = linkChar.length();
			result = sb.toString();
			result = result.subSequence(0, sb.length() - i).toString();
		} catch (FileNotFoundException e) {
			System.out.println("找不到文件" + fileName + "!");
			throw new Exception("文件找不到!");
		} catch (IOException e) {
			System.out.println("出现异常!");
			throw new Exception("文件找不到!");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("出现异常!");
			throw new Exception("文件找不到!");
		} finally {
			return result;
		}
	}

	/**
	 * 将指定文件中的内容已每行转换为字符串数组	 
	 * @param fileName
	 * @return
	 */
	public static String[] readFileToStrArr(String fileName) {
		BufferedReader in;
		ArrayList list = new ArrayList();
		String[] result = null;
		try {
			// 定义文件读的数据流
			in = new BufferedReader(new FileReader(fileName));
			String s;
			while ((s = in.readLine()) != null) {
				list.add(s);
			}
			result = new String[list.size()];
			Iterator it = list.iterator();
			int index = 0;
			while (it.hasNext()) {
				result[index++] = it.next().toString();
			}
			return result;
		} catch (FileNotFoundException e) {
			System.out.println("找不到文件!");
			throw new Exception("文件找不到!");
		} catch (IOException e) {
			System.out.println("出现异常!");
			throw new Exception("文件找不到!");
		} finally {
			return result;
		}
	}

	/**
	 * 将字符串写进文件	 
	 * @param fileName  文件名
	 * @param contant   要写入文件的字符串
	 */
	public static void writeFile(String fileName, String contant) {
		PrintWriter out;
		try {
			out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
			out.print(contant);
			out.close();
		} catch (IOException e) {
			System.out.println("读写文件出现异常!");
		} catch (Exception e) {
			System.out.println("出现异常");
		}
	}

	/**
	 * 字符串转换为字符数组
	 * @param str
	 * @return
	 */
	public static char[] strToChars(String str) {
		try {
			byte[] temp;
			temp = str.getBytes(System.getProperty("file.encoding"));
			int len = temp.length;
			char[] oldStrbyte = new char[len];
			for (int i = 0; i < len; i++) {
				char hh = (char) temp[i];
				if (temp[i] < 0) {
					hh = (char) (temp[i] + 256);
				}
				oldStrbyte[i] = hh;
			}
			return oldStrbyte;
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}

下面是一些零散的知识点:::

得到控制台的输入字符串: 

 BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(new  BufferedInputStream(System.in)));

   System.out.print("\nEnter your regex: ");
   String s = bufferedreader.readLine();

 

system.out重定位方法:

System.setOut()  //注意先把之前的System.out保存起来,然后重定向使用完毕之后再恢复回去!!

同理,还可以设置System.err ,System.in这两个IO流的默认设置.

分享到:
评论
1 楼 cnsuifeng 2012-08-12  
非常感谢,IO操作写的尤其详细。

相关推荐

    Java面试集锦: Core Java Essentials

    最后,本书还强调了代码质量的保证,包括文档化Java应用程序和代码质量的检查。好的编程实践不仅包括编写清晰和可维护的代码,还包括编写良好的文档和注释,这是评估一个Java开发人员是否具有职业素养的重要指标。 ...

    基于NetBeans开发的java应用程序集锦1

    **Java与NetBeans开发平台简介** Java是一种广泛使用的面向对象的编程语言,以其跨平台、安全性高和可移植性等特点闻名。...总之,"基于NetBeans开发的Java应用程序集锦1"为Java初学者提供了一个全面的学习起点。

    Java笔试题集锦:web\jsp\sevlet

    Java笔试题集锦主要涵盖了Java基础、Web技术以及Servlet等相关知识点。以下是对这些知识点的详细说明: 1. **MVC模式**:Model-View-Controller(MVC)是一种设计模式,用于分离应用程序的业务逻辑、用户界面和控制...

    Java编程精选集锦

    Java编程精选集锦.pdf 这份资源集合了Java编程的核心知识点,是学习和提升Java技能的宝贵资料。Java作为一款广泛应用的面向对象编程语言,它的强大在于其跨平台性、高效性和稳定性。以下将深入探讨Java编程的一些...

    Java常见问题集锦

    ### Java常见问题集锦 #### 1. Java2 (JDK 1.2) 的环境配置 - **问题描述**:如何在不同操作系统上正确配置Java2(即JDK 1.2)的环境变量? - **解决方案**: - **Solaris平台**: - 设置`JAVA_HOME`为Java2的...

    Java面试题集锦6:华为面试题 管理资料.pdf

    - 包:java.util、java.io、java.lang、java.nio、java.sql - 接口:Runnable、Comparator、Serializable、Iterable 7. **ArrayList、Vector和LinkedList的比较**: - ArrayList和Vector都是基于数组实现,提供...

    Java案例开发集锦(第二版)源代码

    4. **IO流**:Java的IO流系统是处理输入输出的重要工具,案例可能涵盖了文件读写、网络流、对象序列化等场景,帮助读者掌握数据传输和存储的方法。 5. **多线程**:Java提供了丰富的多线程支持,案例可能涉及线程...

    Java经典项目集锦

    【Java经典项目集锦】是Java编程学习的重要资源集合,涵盖了多个Java开发的经典案例和实践项目,旨在帮助Java初学者和进阶者深入理解和应用Java技术。这些项目不仅能够提升编程技能,还能够锻炼实际问题解决能力,...

    Java常见问题集锦 _Java常见问题集锦_

    这篇Java常见问题集锦将帮助你解决这些问题,提升编程效率。 1. **Java环境安装与配置**: - **JDK安装**:首先,你需要下载适合操作系统的Java Development Kit (JDK)。确保选择正确版本(如32位或64位),并按照...

    java面试笔试题集锦

    6. **反射机制**:Java反射允许程序在运行时动态地获取类的信息并操作类的对象,是很多高级功能的基础,如动态代理、序列化等。 7. **JVM内存模型**:理解堆、栈、方法区、本地方法栈等区域的工作原理,以及垃圾...

    2018年Java面试集锦

    12. **其他**:还包括反射、序列化、注解、枚举、日期时间处理、JUC并发工具类、Lambda表达式等Java高级特性。 这个2018年Java面试集锦无疑是准备面试者的宝贵资源,通过深入学习并熟练掌握这些知识点,可以极大地...

    JAVA案例开发集锦(1)

    JAVA案例开发集锦:分六个压缩卷,请都下载了再解压 第一压缩卷 下完后请把文件名改为:JAVA案例开发集锦[1].part1.rar.rar

    JAVA案例开发集锦pdf

    《JAVA案例开发集锦》是一本专注于Java编程实践的资源集合,它包含了多个精心设计的实例,旨在帮助读者深入理解Java语言的特性和应用。这本书的内容涵盖了从基础语法到高级特性,从简单程序到复杂系统的设计,是学习...

    java 常见问题集锦

    6. **IO流**:Java的输入输出流(IO流)用于读写数据,包括文件操作、网络通信等。熟悉字节流和字符流,以及缓冲区的概念,是处理数据传输的基础。 7. **多线程**:Java内置对多线程的支持,通过`Thread`类或实现`...

    基于NetBeans开发的java应用程序集锦6

    【标题】"基于NetBeans开发的Java应用程序集锦6"主要涵盖了使用NetBeans IDE进行Java应用程序开发的一些实例和实践。NetBeans是一个强大的开源集成开发环境,尤其适合Java开发者,提供了丰富的功能,包括代码编辑、...

    JAVA案例开发集锦.pdf 下载

    1. Java编程基础:案例集锦从Java的基础概念讲起,包括类、对象、接口、线程和继承等关键概念。这些是Java编程的核心,每个Java开发者都必须熟练掌握。 2. Applet案例:书中包含有关Java Applet的案例,这是一种...

    xml的几种方式的操作集锦大全

    例如,Java的JAXB库提供了自动XML序列化和反序列化的能力。 七、XML在网络通信中的应用 XML常用于Web服务(如SOAP),作为数据交换格式。XML请求和响应包含在HTTP报文中,使得不同系统间的通信变得标准化和可理解。...

    java常见错误以及可能原因集锦

    9. **序列号冲突**:在数据库操作中,如果有多个序列同时使用,可能导致序列号冲突,需要调整SQL语句的顺序或避免并发冲突。 10. **表名或列名不存在**:确保表存在且已正确拼写,以及在表中插入了数据。 11. **不...

    java技术文章集锦

    8. **I/O流**:文件操作、网络通信、数据流处理,包括NIO(New IO)和NIO.2(Java 7及以后版本的改进)。 9. **反射与动态代理**:通过反射实现运行时对类、接口和对象的操作,以及动态代理的应用场景(如AOP切面...

Global site tag (gtag.js) - Google Analytics