用JAVA如何将XML文件中的一个值存入String对象?? 我有一批机器(Client), 机器的名称都在一个目录下的XX.xml文件的<device>.......<device>之中。正在写一个传文件的程序,Server需要知道Client机器的名称(从Client传过来),如何用JAVA将它们读出来存入String之中??? 在线等,多谢....... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://developer.51cto.com/art/200903/117512.htm 楼主是要解析xml文件。我都是用jdom来解析的import org.jdom.input.SAXBuilder;SAXBuilder builder = new SAXBuilder();Document doc = builder.build($file);Element xx= doc.getRootElement(); String device= user.getAttributeValue("device"); 直接用 Javabean里的的一些 XMLDecoder XMLEncoder 就可以方便的的进行一些简单的XML写出和读入功能 说多无异 楼主把我的代码拿去 体验一下 就会明白如果符合需求就深入研究一些这两个类 如果不符合就当学习了import java.beans.XMLDecoder;import java.beans.XMLEncoder;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List; class ObjectToXMLUtil { /** * 把java的可序列化的对象(实现Serializable接口)序列化保存到XML文件里面,如果想一次保存多个可序列化对象请用集合进行封装 * 保存时将会用现在的对象原来的XML文件内容 * @param obj 要序列化的可序列化的对象 * @param fileName 带完全的保存路径的文件名 * @throws FileNotFoundException 指定位置的文件不存在 * @throws IOException 输出时发生异常 * @throws Exception 其他运行时异常 */ public static void objectXmlEncoder(Object obj,String fileName) throws FileNotFoundException,IOException,Exception { //创建输出文件 File fo = new File(fileName); //文件不存在,就创建该文件 if(!fo.exists()) { //先创建文件的目录 String path = fileName.substring(0,fileName.lastIndexOf('.')); File pFile = new File(path); pFile.mkdirs(); } //创建文件输出流 FileOutputStream fos = new FileOutputStream(fo); //创建XML文件对象输出类实例 XMLEncoder encoder = new XMLEncoder(fos); //对象序列化输出到XML文件 encoder.writeObject(obj); encoder.flush(); //关闭序列化工具 encoder.close(); //关闭输出流 fos.close(); } /** * 读取由objSource指定的XML文件中的序列化保存的对象,返回的结果经过了List封装 * @param objSource 带全部文件路径的文件全名 * @return 由XML文件里面保存的对象构成的List列表(可能是一个或者多个的序列化保存的对象) * @throws FileNotFoundException 指定的对象读取资源不存在 * @throws IOException 读取发生错误 * @throws Exception 其他运行时异常发生 */ public static List objectXmlDecoder(String objSource) throws FileNotFoundException,IOException,Exception { List objList = new ArrayList(); File fin = new File(objSource); FileInputStream fis = new FileInputStream(fin); XMLDecoder decoder = new XMLDecoder(fis); Object obj = null; try { while( (obj = decoder.readObject()) != null) { objList.add(obj); } } catch (Exception e) { // TODO Auto-generated catch block } fis.close(); decoder.close(); return objList; } } dom4j这个工具比java自己带的xml的工具类好用.. 在J2SE5.0的API中我怎么找不到org.jdom这个包呀!! Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。在java的api中没有,你从网上下个dom4j.jar吧 package beans;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class Dom4jTest { /** * @param args */ public static void main(String[] args) { try { SAXReader reader = new SAXReader(); File file = new File("src/hibernate.cfg.xml"); Document doc = reader.read(file); List childNodes = doc.selectNodes("//device"); System.out.println(childNodes.size()); for(Object obj:childNodes) { Node childNode = (Node)obj; String s = childNode.asXML(); System.out.println("childNode============"+s); } }catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}我给你写了下,在我这测试通过,你改成你自己的文件试下看看行不行。改得地方我用红色给你显示出来了 File file = new File("src/hibernate.cfg.xml");不好意思,本想在代码中给改成红色,可是没有成功。嘿嘿 非常谢谢!!!!!!! 还想问,几十台机器都装dom4j.jar工作量很大 ,也占用宝贵资源,有没有别的办法??利用JAVA-API现有的类......只要把devideno读出来就行 非常谢谢!!!!!!! 这个不需要装的,你只要把dom4j。jar拷贝到你工程的web-inf/lib下就好了。听方便的。还有这东西很小,应该不会占用你多大的资源吧 http://www.cnblogs.com/yiki/archive/2007/07/23/828562.html http://blog.csdn.net/aboykoy/archive/2008/03/16/2187967.aspx 利用JAVA-API现有的类......只要把devideno读出来就行 ,能实现吗?? thanks..... 我不明白你的意思。就是要取得xml里面的<device>....... <device>间的值?那那么麻烦干什么?我机器上没java,大概写写,看个大意吧。import java.io.*;public class DeviceHelper{ public String getDevice() { char data[]=new char[1024]; try{ FileReader fr=new FileReader("...xml"); int num=fr.read(data); String str=new String(data,0,num); int start = str.indexOf("<device>")+1;int end = str.indexOf("</device>");String device = str.subStr(start,end);return device; }catch(...){}finally{ fr.close();}}}大概看看吧,具体的api记不住你把xml全部读出来,然后简单找到返回,不就可以了吗? 我那个回复下面内容不对的:FileReader fr=new FileReader("...xml"); int num=fr.read(data); String str=new String(data,0,num); 我随便找了个读文件的源码拷贝过来修改的。没注意看。请换成把文件全部读到一个String的方法。 17楼 你的方法我看了 我的XML文件内容较多 读出来放入String 这个STRING要多长啊!!再说哪有这样的方法呢??谢谢,我已很受启发了!! 这样啊,你的xml文件分行正常的吧?如果正常,很容易解决。你可以一行一行读进来,然后判断这行是不是<device>(.)+</device>的,如果不是的话就continue;如果是的话,就把这行读成String,直接像上面的那样选取然后返回一行一行读文件,好像BufferedReader有个readLine吧? jdom是个第三方做的包,你要另外下载的。jdom的包放到你执行xml操作的机器上就行,目的就是用它来处理其他机器上的xml文件嘛。java自己的包也能做xml的解析,不过不好用。还是用jdom吧。现在大家都用这个。 请问java怎么冷备份oracle数据库? java怎样进行进制转换 java多线程 Spring 注入速度, 非常慢? 如何使我的实例必须执行某个方法. 新手问题多重继承下的顶层基类的成员怎样直接访问 load ENOEXEC on shared library(s)的原因及解决方法,急!!!! html:text value属性赋值问题 网络传输 有关MVC的问题,请高手指点 求高手写一个判断数字是否为double类型的抛出异常Exception,给全分谢谢 I/O问题
我都是用jdom来解析的import org.jdom.input.SAXBuilder;SAXBuilder builder = new SAXBuilder();
Document doc = builder.build($file);
Element xx= doc.getRootElement(); String device= user.getAttributeValue("device");
简单的XML写出和读入功能
说多无异 楼主把我的代码拿去 体验一下 就会明白
如果符合需求就深入研究一些这两个类 如果不符合就当学习了import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
class ObjectToXMLUtil
{
/**
* 把java的可序列化的对象(实现Serializable接口)序列化保存到XML文件里面,如果想一次保存多个可序列化对象请用集合进行封装
* 保存时将会用现在的对象原来的XML文件内容
* @param obj 要序列化的可序列化的对象
* @param fileName 带完全的保存路径的文件名
* @throws FileNotFoundException 指定位置的文件不存在
* @throws IOException 输出时发生异常
* @throws Exception 其他运行时异常
*/
public static void objectXmlEncoder(Object obj,String fileName)
throws FileNotFoundException,IOException,Exception
{
//创建输出文件
File fo = new File(fileName);
//文件不存在,就创建该文件
if(!fo.exists())
{
//先创建文件的目录
String path = fileName.substring(0,fileName.lastIndexOf('.'));
File pFile = new File(path);
pFile.mkdirs();
}
//创建文件输出流
FileOutputStream fos = new FileOutputStream(fo);
//创建XML文件对象输出类实例
XMLEncoder encoder = new XMLEncoder(fos);
//对象序列化输出到XML文件
encoder.writeObject(obj);
encoder.flush();
//关闭序列化工具
encoder.close();
//关闭输出流
fos.close();
}
/**
* 读取由objSource指定的XML文件中的序列化保存的对象,返回的结果经过了List封装
* @param objSource 带全部文件路径的文件全名
* @return 由XML文件里面保存的对象构成的List列表(可能是一个或者多个的序列化保存的对象)
* @throws FileNotFoundException 指定的对象读取资源不存在
* @throws IOException 读取发生错误
* @throws Exception 其他运行时异常发生
*/
public static List objectXmlDecoder(String objSource)
throws FileNotFoundException,IOException,Exception
{
List objList = new ArrayList();
File fin = new File(objSource);
FileInputStream fis = new FileInputStream(fin);
XMLDecoder decoder = new XMLDecoder(fis);
Object obj = null;
try
{
while( (obj = decoder.readObject()) != null)
{
objList.add(obj);
}
}
catch (Exception e)
{
// TODO Auto-generated catch block
}
fis.close();
decoder.close();
return objList;
}
}
package beans;import java.io.File;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;public class Dom4jTest { /**
* @param args
*/
public static void main(String[] args) { try {
SAXReader reader = new SAXReader();
File file = new File("src/hibernate.cfg.xml");
Document doc = reader.read(file);
List childNodes = doc.selectNodes("//device");
System.out.println(childNodes.size());
for(Object obj:childNodes) {
Node childNode = (Node)obj;
String s = childNode.asXML();
System.out.println("childNode============"+s);
}
}catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}我给你写了下,在我这测试通过,你改成你自己的文件试下看看行不行。改得地方我用红色给你显示出来了
不好意思,本想在代码中给改成红色,可是没有成功。嘿嘿
还想问,几十台机器都装dom4j.jar工作量很大 ,也占用宝贵资源,有没有别的办法??利用JAVA-API现有的类......只要把devideno读出来就行
非常谢谢!!!!!!!
thanks.....
那那么麻烦干什么?我机器上没java,大概写写,看个大意吧。import java.io.*;
public class DeviceHelper
{
public String getDevice()
{
char data[]=new char[1024];
try{
FileReader fr=new FileReader("...xml");
int num=fr.read(data);
String str=new String(data,0,num);
int start = str.indexOf("<device>")+1;
int end = str.indexOf("</device>");
String device = str.subStr(start,end);
return device;
}catch(...){
}finally{
fr.close();
}
}
}大概看看吧,具体的api记不住你把xml全部读出来,然后简单找到返回,不就可以了吗?
int num=fr.read(data);
String str=new String(data,0,num); 我随便找了个读文件的源码拷贝过来修改的。没注意看。请换成把文件全部读到一个String的方法。
再说哪有这样的方法呢??
谢谢,我已很受启发了!!