xml、文件操作功能类

我一个项目中用到的,里面的方法不是太通用,但是可以从里面找到一些有用的代码,以后慢慢添补更新:

FileUtil.xml

 1 package com.novel.util;
 2
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 import java.io.InputStreamReader;
 9
10 /**
11  * @author cy
12  *
13  * @date 2015年7月24日 上午8:38:38
14  *
15  * @Description 关于文件的一些工具
16  */
17 public class FileUtils {
18     /**
19      * 将文件中所有内容读取到字符串中
20      *
21      * @param filePath
22      *            文件路径
23      * @return 文件内容
24      */
25     public static String getStringFromFile(String filePath) {
26         File file = new File(filePath) ;
27         if(!file.exists()){
28              return "" ;
29         }
30         /**
31          * 处理文件读取乱码问题 :
32          * 只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。
33             *对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65
34          */
35         try{
36             byte[] firstThreeByte = new byte[3] ;
37             InputStream in = new FileInputStream(file) ;
38             in.read(firstThreeByte) ;
39             in.close() ;
40             String encoding = "" ;
41             if(firstThreeByte[0] == -17 && firstThreeByte[1] == -16 && firstThreeByte[2] == -65){
42                 encoding = "utf-8" ;
43             }else{
44                 encoding = "gbk" ;
45             }
46              InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding);
47             Long filelength = file.length() / 2 ; // 该方法获取的是文件字节长度,
48                                                   //而我要创建的是char数组,char占两个字节,
49                                                   //byte一个字节,所以除以2表示的是该文件的字符长度
50             char[] filecontent = new char[filelength.intValue()] ;
51             read.read(filecontent) ;
52             return new String(filecontent) ;
53         }catch(Exception e ){
54             e.printStackTrace();
55             return "" ;
56         }
57     }
58
59     /**
60      * 将字符串写入文件
61      *
62      * @param content
63      *            字符串内容
64      * @param filePath
65      *            文件路径
66      * @throws IOException
67      */
68     public static void writeStringToFile(String content, String filePath)
69             throws IOException {
70
71         File file = new File(filePath);
72         if (!file.exists()) {
73             file.createNewFile();
74         }
75         FileOutputStream out = new FileOutputStream(file);
76         out.write(content.getBytes());
77         out.close();
78     }
79     /**
80      * 删除指定的文件
81      * @param filePath文件路径
82      */
83     public static void deleteFile(String filePath ) {
84         File file = new File(filePath) ;
85         if(file.exists()){
86             file.delete() ;
87         }
88     }
89 }

XmlUtil.java

  1 package com.novel.util;
  2
  3 import java.io.File;
  4 import java.io.IOException;
  5 import java.util.ArrayList;
  6 import java.util.HashMap;
  7 import java.util.List;
  8 import java.util.Map;
  9
 10 import javax.xml.parsers.DocumentBuilder;
 11 import javax.xml.parsers.DocumentBuilderFactory;
 12 import javax.xml.parsers.ParserConfigurationException;
 13 import javax.xml.transform.OutputKeys;
 14 import javax.xml.transform.Transformer;
 15 import javax.xml.transform.TransformerConfigurationException;
 16 import javax.xml.transform.TransformerException;
 17 import javax.xml.transform.TransformerFactory;
 18 import javax.xml.transform.TransformerFactoryConfigurationError;
 19 import javax.xml.transform.dom.DOMSource;
 20 import javax.xml.transform.stream.StreamResult;
 21
 22 import org.w3c.dom.Document;
 23 import org.w3c.dom.Element;
 24 import org.w3c.dom.Node;
 25 import org.w3c.dom.NodeList;
 26 import org.w3c.dom.Text;
 27 import org.xml.sax.SAXException;
 28
 29 import com.novel.entity.Novel;
 30 import com.novel.entity.User;
 31
 32 /**
 33  * @author cy
 34  *
 35  * @date 2015年7月23日 下午3:19:06
 36  *
 37  * @Description 关于xml的操作
 38  */
 39 public class XmlUtil {
 40     /**
 41      * 目标xml为 config/users.xml
 42      *
 43      * @param user
 44      *            将要被写入xml的User对象
 45      * @return 是否成功
 46      */
 47     public static boolean writeUserToXml(User user) {
 48         try {
 49             Document doc = getDocumentFromXml("config/users.xml");
 50             Element newUserElement = doc.createElement("user");
 51             Element newUsernameElement = doc.createElement("name");
 52             Text nameTextNode = doc.createTextNode("nameValue");
 53             nameTextNode.setNodeValue(user.getName());
 54             newUsernameElement.appendChild(nameTextNode);
 55             Element newUserPwdElement = doc.createElement("pwd");
 56             Text pwdTextNode = doc.createTextNode("pwdValue");
 57             pwdTextNode.setNodeValue(user.getName());
 58             newUserPwdElement.appendChild(pwdTextNode);
 59             newUserElement.appendChild(newUsernameElement);
 60             newUserElement.appendChild(newUserPwdElement);
 61             Element usersElement = (Element) doc.getElementsByTagName("users")
 62                     .item(0);
 63             usersElement.appendChild(newUserElement);
 64
 65             writeDocumentToFile(doc, "config/users.xml");
 66             return true;
 67         } catch (Exception e) {
 68             e.printStackTrace();
 69             return false;
 70         }
 71     }
 72
 73     /**
 74      *
 75      * @param doc
 76      *            XML中的Document对象
 77      * @param filePath
 78      *            输出的文件路径
 79      * @throws TransformerFactoryConfigurationError
 80      * @throws TransformerConfigurationException
 81      * @throws TransformerException
 82      */
 83     private static void writeDocumentToFile(Document doc, String filePath)
 84             throws TransformerFactoryConfigurationError,
 85             TransformerConfigurationException, TransformerException {
 86         // 写入到硬盘
 87         TransformerFactory tFactory = TransformerFactory.newInstance();
 88         Transformer transformer = tFactory.newTransformer();
 89         /** 编码 */
 90         transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
 91         DOMSource source = new DOMSource(doc);
 92         StreamResult result = new StreamResult(new File(filePath));
 93         transformer.transform(source, result);
 94     }
 95
 96     /**
 97      * 加载config/users.xml中用户信息到对象中
 98      *
 99      * @return 加载后的对象
100      */
101     public static Map<String, User> initUser() {
102         InitUser.users = new HashMap<String, User>();
103         try {
104             Document doc = getDocumentFromXml("config/users.xml");
105             NodeList usersNodeList = doc.getElementsByTagName("user");
106             for (int i = 0; i < usersNodeList.getLength(); i++) {
107                 Element userElement = (Element) usersNodeList.item(i);
108                 String userName = ((Element) (userElement
109                         .getElementsByTagName("name").item(0))).getFirstChild()
110                         .getNodeValue();
111                 String passwd = ((Element) (userElement
112                         .getElementsByTagName("pwd").item(0))).getFirstChild()
113                         .getNodeValue();
114                 InitUser.users.put(userName, new User(userName, passwd));
115             }
116         } catch (Exception e) {
117             e.printStackTrace();
118         } finally {
119             return InitUser.users;
120         }
121     }
122
123     /**
124      * 从xml中获取服务器运行的端口
125      *
126      * @return server.xml文件中的端口号
127      */
128     public static int getServerPort() {
129         try {
130             Document doc = getDocumentFromXml("config/server.xml");
131             int serverPort = Integer.parseInt(doc
132                     .getElementsByTagName("server-port").item(0)
133                     .getFirstChild().getNodeValue());
134             return serverPort;
135         } catch (Exception e) {
136             e.printStackTrace();
137             return 0;
138         }
139     }
140
141     /**
142      *
143      * @param xmlPath
144      *            xml文件的位置
145      * @return 这个xml文件相应的Document对象
146      * @throws SAXException
147      * @throws IOException
148      * @throws ParserConfigurationException
149      */
150     public static Document getDocumentFromXml(String xmlPath)
151             throws SAXException, IOException, ParserConfigurationException {
152         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
153         DocumentBuilder builder = factory.newDocumentBuilder();
154         Document doc = builder.parse(xmlPath);
155         return doc;
156     }
157
158     /**
159      * 读取xml中小说的信息到List中
160      *
161      * @param novelId
162      *            小说id
163      * @return 小说列表
164      * @throws ParserConfigurationException
165      * @throws IOException
166      * @throws SAXException
167      */
168     public static List<Novel> getNovelListFromXml(String filePath) throws SAXException, IOException, ParserConfigurationException {
169         List<Novel> novelList = new ArrayList<Novel>();
170         Document doc = getDocumentFromXml(filePath);
171         NodeList novels = doc.getElementsByTagName("novel");
172         for (int i = 0; i < novels.getLength(); i++) {
173             Element novel = ((Element) novels.item(i));
174             int id = Integer.parseInt(novel.getElementsByTagName("id").item(0)
175                     .getFirstChild().getNodeValue());
176             String name = novel.getElementsByTagName("name").item(0)
177                     .getFirstChild().getNodeValue();
178             String author = novel.getElementsByTagName("author").item(0)
179                     .getFirstChild().getNodeValue();
180             String category = novel.getElementsByTagName("category").item(0)
181                     .getFirstChild().getNodeValue();
182             String description = novel.getElementsByTagName("description")
183                     .item(0).getFirstChild().getNodeValue();
184
185             Novel oneNovel = new Novel(id, category, name, author, description);
186             novelList.add(oneNovel);
187         }
188         return novelList ;
189     }
190     /**
191      * 将Novel信息写入到config/novelsInfo.xml中并且将小说内容写入到novel文件夹下
192      * @param novel 小说对象
193      * @return 是否写入成功
194      * TODO:确定原子操作
195      */
196     public static boolean writeNovelToFile(Novel novel ) {
197         /**
198          * 先将小说内容写入到novel文件夹下,再将小说信息写入到config/novelsInfo.xml中
199          */
200         try{
201             FileUtils.writeStringToFile(novel.getContent(), "novel/" + novel.getName() + ".txt");
202             XmlUtil.writeNovelInfoToXml(novel) ;
203             return true ;
204         }catch(Exception e ){
205             /**
206              * 如果写入小说到文件中出现问题,要将已经写入的信息删除
207              * 这段代码应该很少执行到 ~~~~
208              *
209              */
210             System.out.println("小说写入文件失败,正在回滚~~");
211             FileUtils.deleteFile("novel/" + novel.getName() + ".txt") ;
212             XmlUtil.deleteNovelInfoFromXml(novel) ;
213             e.printStackTrace();
214             return false ;
215         }
216     }
217
218     /**
219      * 从config/novelsInfo.xml中删除与novel对象相对应的的novel标签,根据ID号判断是否相同
220      *
221      * @param novel
222      *            小说对象
223      */
224     public static void deleteNovelInfoFromXml(Novel novel) {
225         try {
226             Document doc = getDocumentFromXml("config/novelsInfo.xml");
227             Element novelsElement = (Element) doc
228                     .getElementsByTagName("novels").item(0);
229             NodeList novelElements = novelsElement
230                     .getElementsByTagName("novel");
231
232             Node deleteElement = null;
233             for (int i = 0; i < novelElements.getLength(); i++) {
234                 String id = ((Element) novelElements.item(i))
235                         .getElementsByTagName("id").item(0).getFirstChild()
236                         .getNodeValue();
237                 if (id.equals(String.valueOf(novel.getId()))) {
238                     deleteElement = novelElements.item(i);
239                     break;
240                 }
241             }
242             novelsElement.removeChild(deleteElement);
243             writeDocumentToFile(doc, "config/novlesInfo.xml");
244         } catch (Exception e) {
245             e.printStackTrace();
246         }
247     }
248     /**
249      * 将小说信息写入到config/novelsInfo.xml文件中
250      * @param novel小说对象
251      */
252     public static void writeNovelInfoToXml(Novel novel){
253         Document doc = null ;
254         try {
255             doc = getDocumentFromXml("config/novelsInfo.xml");
256         } catch (Exception e) {
257             e.printStackTrace();
258             return ;
259         }
260         Element novelDocument = (Element)doc.createElement("novel") ;
261         // id
262         Element novelIdDocument = (Element)doc.createElement("id") ;
263         Text novelIdTextNode = doc.createTextNode("idValue") ;
264         novelIdTextNode.setNodeValue(String.valueOf(novel.getId()));
265         novelIdDocument.appendChild(novelIdTextNode);
266         // name
267         Element novelNameDocument = (Element)doc.createElement("name") ;
268         Text novelNameTextNode = doc.createTextNode("nameValue") ;
269         novelNameTextNode.setNodeValue(String.valueOf(novel.getName()));
270         novelNameDocument.appendChild(novelNameTextNode);
271         // author
272         Element novelAuthorDocument = (Element)doc.createElement("author") ;
273         Text novelAuthorTextNode = doc.createTextNode("authorValue") ;
274         novelAuthorTextNode.setNodeValue(String.valueOf(novel.getAuthor()));
275         novelAuthorDocument.appendChild(novelAuthorTextNode);
276         // category
277         Element novelCategoryDocument = (Element)doc.createElement("category") ;
278         Text novelCategoryTextNode = doc.createTextNode("categoryValue") ;
279         novelCategoryTextNode.setNodeValue(String.valueOf(novel.getCategory()));
280         novelCategoryDocument.appendChild(novelCategoryTextNode);
281         // description
282         Element novelDescriptionDocument = (Element)doc.createElement("description") ;
283         Text novelDescriptionTextNode = doc.createTextNode("descriptionValue") ;
284         novelDescriptionTextNode.setNodeValue(String.valueOf(novel.getDescription()));
285         novelDescriptionDocument.appendChild(novelDescriptionTextNode);
286
287         novelDocument.appendChild(novelIdDocument) ;
288         novelDocument.appendChild(novelNameDocument) ;
289         novelDocument.appendChild(novelAuthorDocument) ;
290         novelDocument.appendChild(novelCategoryDocument) ;
291         novelDocument.appendChild(novelDescriptionDocument) ;
292         doc.getElementsByTagName("novels").item(0).appendChild(novelDocument) ;
293         // 写到文件中
294         try {
295             writeDocumentToFile(doc, "config/novelsInfo.xml");
296         } catch (Exception e) {
297             e.printStackTrace();
298         }
299     }
300 }
时间: 2024-10-29 05:52:53

xml、文件操作功能类的相关文章

xml文件操作帮助类

xml文件的节点值获取和节点值设置 /// <summary> /// 保存单个点节点的值 /// </summary> /// <param name="UpNodeName">父级节点名称</param> /// <param name="NodeName">子节点名称</param> /// <param name="NodeNumber">子节点值<

Asp.Net 文件操作基类

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.T

Spring Batch 简单应用 (三)(XML文件操作)

前篇关于Spring Batch的文章,讲述了Spring Batch 对CSV文件的读写操作. 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对XML文件的读写操作.实例流程是从一个XML文件中读取商品信息,经过简单的处理,写入另外一个XML文件中. 工程结构如下图: log4j.xml是log处理的配置文件,与本文没有必然联系,再此不做论述. application.xml文件内容如下: 按 Ctrl+C 复制代码 <?xml version="1.0"

C#读取XML文件的基类实现

刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node.Attribute(name)方法,因此,想到结合之前所做的XML操作,完成了一个能够读取XML文件的基类,便于以后的使用. PS:即使再老套的代码,目前也不敢进行优化,一是水平不行,二是不敢. 使用静态扩展类,扩展了几个经常使用的类型,能够方便数据的读写. 操作XML的类,可以直接继承BaseL

xml文件操作

一.xml文件操作1.了解xml文件的SAX解析方式 1.1SAX解析XML  //第一步:解析xml的对象  //工厂模式   SAXParser parser = SAXParserFactory       .newInstance()       .newSAXParser();  //第二步:获得xml文件   InputStream is = getResources().openRawResource(R.raw.shu);  //第三步: 处理器   DefaultHandler

python解析xml文件操作的例子

python解析xml文件操作实例,操作XML文件的常见技巧. xml文件内容: <?xml version="1.0" ?> <!--Simple xml document__chapter 8--> <book> <title> sample xml thing </title> <author> <name> <first> ma </first> <last>

ASP.NET文件操作通用类

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 using System.IO; 7 using System.Web; 8 using System.Web.UI; 9 using System.Web.UI.WebControls; 10 11 12 public class WebFileHelper 13 { 14 15 FileInfo f

XML文件与实体类之间的互相转换

二 序列化 XML文件与实体类的互相转换 一.将XML文件反序列化为实体类对象 1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config).但是现在为了演示XML序列化和反序列化,将配置信息保存在一个XML文件(config.xml)中,通过反序列化将配置信息读取出来保存到一个单独的类(Config.cs)中.这样如果需要用到配置信息,没必要每次都读写XML文件,只需要调用Config这个类就可以获取对应节点的信息. config.xml: <?

XML文件操作类--创建XML文件

这个类是在微软XML操作类库上进行的封装,只是为了更加简单使用,包括XML类创建节点的示例. using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; namespace testForm { class Operation_APPCFG { XmlDocument xmldoc; XmlNode