日期:2020.01.16
博客期:125
星期四
我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beangroup> 3 <javabean> 4 <data name=‘code‘>A001</data> 5 <data name=‘name‘>张三</data> 6 </javabean> 7 </beangroup>
XML文件类型
{ list:[ { code:"A001", name:"张三" } ] }
JSON文件类型
code,name A001,张三
CSV文件类型
【此处预留给未来添加的文件类型】
我所需要的基本功能是对表型数据的读写,这一点对于CSV这一种标准表形式的文件来说,构造它轻而易举,也没什么难度!而对于JSON和XML来说很难,其实JSON和XML是可以相互转换的,或者说这二者可以等价,毕竟JSON对应属性和XML对应标签属性如出一辙!而XML的标签内部内容刚好对应JSON里的具体内容!
好了话不多说,赶紧加代码:
com.filedeal包:
1 package com.filedeal; 2 3 import java.io.File; 4 5 import com.dblink.bean.BeanGroup; 6 7 public interface FileControler { 8 //---[set、get方法] 9 //设置文件信息 10 void setFile(File file); 11 //获取处理的文件信息 12 File getFile(); 13 //---[类与对象方法] 14 //释放 15 void free(); 16 //重新设置 17 void reset(); 18 //表型数据植入 19 public void setUnderprinted(BeanGroup bg); 20 //表型数据获取 21 public BeanGroup getUnderprinted(); 22 }
FileControler.java
1 package com.filedeal; 2 3 import com.dblink.bean.BeanGroup; 4 import com.dblink.bean.JavaBean; 5 import com.filedeal.csv.CSVFileDealer; 6 7 public class FileControlerTest { 8 public static void main(String[] args) { 9 BeanGroup bg = new BeanGroup(); 10 JavaBean jb1 = new JavaBean(); 11 jb1.add("序号"); 12 jb1.add("名称"); 13 jb1.add("性别"); 14 JavaBean jb2 = new JavaBean(); 15 jb2.add(1); 16 jb2.add("张三"); 17 jb2.add("男"); 18 JavaBean jb3 = new JavaBean(); 19 jb3.add(2); 20 jb3.add("李四"); 21 jb3.add("女"); 22 bg.add(jb1); 23 bg.add(jb2); 24 bg.add(jb3); 25 CSVFileDealer csv = new CSVFileDealer("src/testFiles/art.csv"); 26 csv.setUnderprinted(bg); 27 csv.free(); 28 } 29 }
FileControlerTest.java
com.filedeal.csv包:
1 package com.filedeal.csv; 2 3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.OutputStreamWriter; 9 import java.io.PrintWriter; 10 import java.io.UnsupportedEncodingException; 11 import java.util.Scanner; 12 13 import com.dblink.bean.BeanGroup; 14 import com.dblink.bean.JavaBean; 15 import com.filedeal.FileControler; 16 17 public class CSVFileDealer implements FileControler { 18 protected File file; 19 @Override 20 public void setFile(File file) { 21 this.file = file; 22 } 23 @Override 24 public File getFile() { 25 return file; 26 } 27 @Override 28 public void free() { 29 // Do Nothing ... 30 } 31 @Override 32 public void reset() { 33 String name = this.file.getName(); 34 this.free(); 35 this.file = new File(name); 36 } 37 //---[数据处理] 38 //设置数据集合 39 @Override 40 public void setUnderprinted(BeanGroup bg) { 41 try { 42 if(!file.exists()) 43 return; 44 PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"GB2312"))); 45 int leng = bg.size(); 46 47 for(int i=0;i<leng;++i) 48 { 49 JavaBean jb = bg.get(i); 50 String str = ""; 51 52 int leng_s = jb.size(); 53 54 for(int j=0;j<leng_s;++j) 55 { 56 String tmp = jb.get(j).toString(); 57 if(j==0) 58 str += tmp; 59 else 60 str += ","+tmp; 61 } 62 63 pw.println(str); 64 } 65 66 pw.close(); 67 } catch (FileNotFoundException e) { 68 e.printStackTrace(); 69 } catch (UnsupportedEncodingException e) { 70 e.printStackTrace(); 71 } 72 } 73 //获取数据集合 74 @Override 75 public BeanGroup getUnderprinted(){ 76 BeanGroup bg = new BeanGroup(); 77 try { 78 if(!this.file.exists()) 79 return bg; 80 Scanner sc = new Scanner(this.file); 81 while(sc.hasNextLine()) 82 { 83 String str = sc.nextLine(); 84 String [] sg = str.split(","); 85 86 JavaBean jb = new JavaBean(); 87 88 int leng = sg.length; 89 90 for(int i=0;i<leng;++i) 91 { 92 String tmp = sg[i]; 93 jb.add(tmp); 94 } 95 96 bg.add(jb); 97 } 98 sc.close(); 99 } catch (FileNotFoundException e) { 100 e.printStackTrace(); 101 } 102 return bg; 103 } 104 //---[构造方法] 105 public CSVFileDealer(String filePath){ 106 super(); 107 this.file = new File(filePath); 108 if(!this.file.exists()) 109 { 110 try { 111 this.file.createNewFile(); 112 } catch (IOException e) { 113 e.printStackTrace(); 114 } 115 } 116 } 117 public CSVFileDealer(File file){ 118 super(); 119 this.file = file; 120 if(!this.file.exists()) 121 { 122 try { 123 this.file.createNewFile(); 124 } catch (IOException e) { 125 e.printStackTrace(); 126 } 127 } 128 } 129 }
CSVFileDealer.java
【此处预留给未来添加的文件类型】
实现类图:
类图博主正在快马加鞭的绘制... ...
所用设计模式:
1、策略模式:我发现这个模式真好用,而且简单,而且好用,嗯!针对文件处理不同的文件类型采取不一样的策略
2、模板方法模式:文件的读写操作算是基本的模板方法!
3、代理模式:嗯~要想json和xml的数据源完成读写事先需要调用ReadableTable类的方法进行数据整理,这一部分方法被封装在代理类里面,也可以不做数据处理,这正是代理模式的初衷!
原文地址:https://www.cnblogs.com/onepersonwholive/p/12203688.html
时间: 2024-11-09 10:04:17