最近公司在做数据迁移,迁移脚本是在原有的基础上修改的.迁移完成之后,感觉脚本在格式上不是很美观,于是就在想能不能写一段程序进行格式化.恰好最近正在看<<企业集成模式>>,能否通过它的思想来完成这个事呢?
package com.app.common.util.file.transformer;
/**
* 行转换器
*
* @author Administrator
*
*/
public interface LineTransformation {
public static final String EMPTY_STRING = "";
public String transform(String line);
}
package com.app.common.util.file.transformer;
/**
* 小写转换器
* @author Administrator
*
*/
public class LowerCaseTransformation implements LineTransformation {
@Override
public String transform(String line) {
if (null == line) {
return EMPTY_STRING;
}
return line.toLowerCase();
}
}
package com.app.common.util.file.transformer;
/**
* 大写转换器
* @author Administrator
*
*/
public class UpperCaseLineTransformation implements LineTransformation {
@Override
public String transform(String line) {
if (null == line) {
return EMPTY_STRING;
}
return line.toUpperCase();
}
}
package com.app.common.util.file.transformer;
/**
* trim转换器
* @author Administrator
*
*/
public class TrimLineTransformation implements LineTransformation {
@Override
public String transform(String line) {
if (null == line) {
return EMPTY_STRING;
}
return line.trim();
}
}
package com.app.common.util.file.transformer;
import java.util.TreeMap;
/**
* 行输入适配器
* @author Administrator
*
*/
public interface LineInAdapter {
public static final TreeMap<Long, String> EMPTY_MAP = new TreeMap<Long, String>();
public TreeMap<Long, String> doExecute();
}
package com.app.common.util.file.transformer;
import java.io.*;
import java.util.TreeMap;
/**
* 文件行输入适配器
* @author Administrator
*
*/
public class FileLineInAdapter implements LineInAdapter {
private File file;
public FileLineInAdapter(File file) {
if (null == file || !file.exists() || file.isDirectory()
|| !file.canRead()) {
throw new IllegalArgumentException(
"file must exist,be a file and can read.");
}
this.file = file;
}
@Override
public TreeMap<Long, String> doExecute() {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(this.file));
} catch (FileNotFoundException e) {
}
if (null == reader) {
return EMPTY_MAP;
}
TreeMap<Long, String> result = new TreeMap<Long, String>();
Long lineNum = 1l;
String line = null;
try {
while (null != (line = reader.readLine())) {
result.put(lineNum++, line);
}
} catch (IOException e) {
} finally {
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
}
}
}
return result;
}
}
package com.app.common.util.file.transformer;
import java.util.TreeMap;
/**
* 行输出适配器
* @author Administrator
*
*/
public interface LineOutAdapter {
public void doExecute(TreeMap<Long, String> lineMap);
}
package com.app.common.util.file.transformer;
import java.io.*;
import java.util.*;
/**
* 文件行输出适配器
* @author Administrator
*
*/
public class FileLineOutAdapter implements LineOutAdapter {
public static final String FILE_EXTENSION = ".";
private File file;
public FileLineOutAdapter(File file) {
if (null == file) {
throw new IllegalArgumentException("file can't be null.");
}
String filePath = null;
try {
filePath = file.getCanonicalPath();
} catch (IOException e) {
}
if (null == filePath) {
throw new IllegalArgumentException("can't get CanonicalPath.");
}
if (filePath.contains(FILE_EXTENSION) == false) {
throw new IllegalArgumentException("file must be a file.");
}
this.file = file;
}
@Override
public void doExecute(TreeMap<Long, String> lineMap) {
if (null == lineMap || lineMap.isEmpty()) {
return;
}
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(this.file));
} catch (IOException e) {
e.printStackTrace();
}
if (null == writer) {
return;
}
Collection<String> lines = lineMap.values();
try {
for (String line : lines) {
writer.write(line);
writer.newLine();
}
writer.flush();
} catch (IOException e) {
} finally {
if (null != writer) {
try {
writer.close();
} catch (IOException e) {
}
}
}
}
}
package com.app.common.util.file.transformer;
import java.util.List;
import java.util.TreeMap;
/**
* 行处理器
*
* @author Administrator
*
*/
public interface LineProcesser {
public void setLineTransformations(List<LineTransformation> transformations);
public TreeMap<Long, String> process(TreeMap<Long, String> lineMap);
}
package com.app.common.util.file.transformer;
import java.util.*;
import java.util.Map.Entry;
/**
* 默认行处理器
* @author Administrator
*
*/
public class DefLineProcesser implements LineProcesser {
private List<LineTransformation> transformations;
public DefLineProcesser() {
}
public DefLineProcesser(List<LineTransformation> transformations) {
this.setLineTransformations(transformations);
}
@Override
public void setLineTransformations(List<LineTransformation> transformations) {
this.transformations = transformations;
}
@Override
public TreeMap<Long, String> process(TreeMap<Long, String> lineMap) {
if (null == this.transformations || this.transformations.size() == 0) {
throw new IllegalArgumentException(
"please set transformations first.");
}
if (null == lineMap || lineMap.isEmpty()) {
return new TreeMap<Long, String>();
}
TreeMap<Long, String> result = new TreeMap<Long, String>();
Set<Entry<Long, String>> entries = lineMap.entrySet();
for (Entry<Long, String> entry : entries) {
String line = entry.getValue();
for (LineTransformation transformation : this.transformations) {
line = transformation.transform(line);
}
result.put(entry.getKey(), line);
}
return result;
}
}
package com.app.common.util.file.transformer;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
/**
* 测试类
* @author Administrator
*
*/
public class TestLineProcesser {
/**
* @param args
*/
public static void main(String[] args) {
File inputFile = new File("c:/test/a.txt");
File outFile = new File("c:/a.txt");
LineProcesser processer = new DefLineProcesser();
List<LineTransformation> transformations = new ArrayList<LineTransformation>();
transformations.add(new TrimLineTransformation());
transformations.add(new UpperCaseLineTransformation());
processer.setLineTransformations(transformations);
LineInAdapter inAdapter = new FileLineInAdapter(inputFile);
TreeMap<Long, String> lineMap = processer
.process(inAdapter.doExecute());
LineOutAdapter outAdapter = new FileLineOutAdapter(outFile);
outAdapter.doExecute(lineMap);
System.out.println("finished...");
}
}
当然还可以编写其它的行转换器,只需要实现LineTransformation接口即可,再将其加入到行处理器中就可以了.
分享到:
相关推荐
一、文件转换器的重要性 1. 兼容性:不同的操作系统、应用程序和设备可能支持不同的文件格式。例如,PDF文件在阅读和打印方面具有良好的一致性,但编辑起来相对困难,而Word文档则更便于编辑。文件转换器能解决这些...
Coreldrw文件转换器,如果用高版本打不开低版本的文件,用这个试试?
文件格式转换器是一种工具软件,它的主要功能是帮助用户将不同类型的文件从一种格式转换成另一种格式。在日常工作中,我们经常会遇到各种不同格式的文件,如文本文件(.txt)、电子书文件(.epub、.mobi)、图像文件...
LRC歌词文件转换器是一种工具,专门用于处理.LRC格式的歌词文件,这种格式常见于中文音乐领域,便于同步显示歌曲的歌词。.LRC文件由一系列时间戳和对应的歌词文本组成,时间戳指示了歌词在歌曲中的出现时刻。转换器...
《NCM文件转换器——深度解析与应用指南》 在数字化音乐时代,各种音乐格式层出不穷,其中网易云音乐推出的NCM格式因其独特的加密方式,给用户带来了一定的使用限制。不过,借助“NCM文件转换器”,我们可以轻松将...
“帮库CHM文件转换器”可能就是这样一个工具,它可能提供了一种直观的界面,让用户可以轻松选择CHM文件并选择目标转换格式。转换过程可能支持批量操作,节省用户时间。此外,它可能还提供了预览功能,允许用户在转换...
【标题】"所有文件到PowerPoint转换器"是一款专门针对多格式文件转换成PowerPoint演示文稿的工具。它能够帮助用户将不同类型的文件,如文本文档、图像、PDF等,方便快捷地转换为Microsoft PowerPoint的.ppt或.pptx...
Office 2007文件格式转换器是一款专为处理Microsoft Office 2007文档设计的工具,它能够帮助用户将新版本的Office文件转换为更旧版本的格式,或者将其他格式的文档转换为Office 2007支持的格式。在日常工作中,我们...
【XV文件转换器】是一款专门针对迅雷下载的特殊视频格式——XV(迅雷专有格式)设计的转换工具。XV格式是迅雷为了优化其下载服务和提高用户体验而开发的一种加密视频格式,通常只能通过迅雷看看播放器进行播放,并且...
转换器的使用方法很简单,只需把你要转换的txt文件放到任意一个文件夹里面,然后运行txt文件编码批量转换器,选择你要转换的编码,然后点击选择文件夹按钮,在弹出窗口中选择你放txt文件的那个文件夹,然后确定。...
标题中的“文件系统转换器”指的是一个工具或软件,它能够帮助用户在不同的文件系统之间进行转换。在计算机领域,文件系统是管理磁盘上数据存储的一种方式,常见的有FAT32、NTFS、exFAT等。不同的操作系统或设备可能...
本文将深入探讨“文件编码转换器”的相关知识点,以及它如何处理不同编码格式的文件。 1. **文件编码**: 文件编码是存储字符的方式,常见的有ASCII、GBK、UTF-8等。ASCII是最基础的编码,只包含英文字符;GBK是中国...
ET DXF文件转换器是一款专为工程技术人员设计的实用工具,它主要功能是实现PRJ文件与DXF文件之间的相互转换。在CAD(计算机辅助设计)领域,DXF(Drawing Exchange Format)是一种广泛使用的文件格式,由Autodesk...
Acme CAD Converter作为转换器,能够处理以下几种常见的CAD文件转换需求: 1. DWG到DXF:用户可以将DWG文件转换为DXF格式,以便在不支持DWG的软件中打开或编辑。 2. DXF到DWG:同样,也可以将DXF文件转换回DWG格式...
然而,由于WAV文件通常较大,不便于存储和传输,因此,有时我们需要将其他格式的音频文件转换为WAV,以满足特定的用途,如音乐制作、专业编辑或某些设备的播放需求。 音频文件格式转换器支持多种音频格式,包括但不...
是否下载了一个文本文件打开是乱码呢?是否手机电子书编码需要转换呢...原创文件编码转换器。Java编写,多平台运行。源码奉献。啊啊啊啊啊啊。。。只要1分。如果不想给分,可以email我 iamjemy@gmail.com邮件发送给你。
Python ico文件转换器是一个简单的工具,可以将图像文件转换为 .ico 格式,以便在 Windows 操作系统中使用。这个工具可以帮助你轻松地将常见的图像格式(如 .jpg、.png、.bmp 等)转换为图标文件,当打包程序需要...
GFT文件转换,还原原始文件。主要用于QQ安装文件中的GFT文件的还原