java读取文件后修改,并写入到另一个文件
来源:互联网 发布:mac在哪里新建文件夹 编辑:程序博客网 时间:2024/05/17 02:21
首先,用java读取文件和写入文件都其实很简单,但重点是修改文件。
修改可以为替换、删除、新增字符。所以不能用inputstream那种字节流的方式,以下例子使用BufferedReader的方式来读取每行的字符数据。
完成一个Util java文件如下:
主要要用到common-io.jar 包,其中有一些正则表达式规则来做替换工作。
package com.zjhc.hcdream.util;import java.io.*;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Created by Gerrard on 2016-9-14. */public class TransformUtil { public static void main(final String[] args) throws Exception { String inFile = "D:/3XDATA/test/"; // 输入文件路径 String outFile = "D:/3XDATA/out/"; // 输出文件路径 String paths="/user/hive/ggzyjy/"; String dbo="ggzyjy"; File file=new File(inFile); File[] tempList = file.listFiles(); for (int i = 0; i < tempList.length; i++) { if (tempList[i].isFile()) { tranformMethod(tempList[i].toString(),outFile,paths,dbo); } } } public static void tranformMethod(String inFile,String outFile,String paths,String dbo) throws IOException { String fileName=""; BufferedReader bs = null; BufferedWriter bw = null; try{ bs = new BufferedReader(new FileReader(new File(inFile))); List<String> outData = new ArrayList<String>(); String line = null; String[] data = null; //如果确定ID1一直是整数的活,可以用整数比,否则可以用字符串的equals比较 int oldId1 = 0; int newId1 = 0; int oldId2 = -1; int newId2 = -1; int num=0; int count=0; while((line = bs.readLine()) != null){ String lowLine=line.toLowerCase(); // 把所有[]都去掉 lowLine=lowLine.replace("[",""); lowLine=lowLine.replace("]",""); if(num==1){ // 字符修改处 // 将Table换成 if(lowLine.contains("table")){ lowLine=lowLine.replace("table","external table"); lowLine=lowLine.replace("dbo","ggzyjy"); // 获取表明 Pattern pattern = Pattern.compile("ggzyjy.(.*)\\($"); Matcher matcher = pattern.matcher(lowLine); while(matcher.find()){ fileName=matcher.group(1); fileName=fileName.trim(); } } if(count==1){// 加固操作,只改()里面的 // 替换字符类型 boolean flag=false; String[] regex = {"nvarchar.*,$","datetime.*,$","bit.*,$","varchar.*,$","timestamp .*,$", "date.*,$","ntext.*,$","int.*,$","bigint.*,$","float.*,$","double.*,$","numeric.*,$","nvarchar.*\\s+$","datetime.*\\s+$","bit.*\\s+$","varchar.*\\s+$","timestamp .*\\s+$", "date.*\\s+$","ntext.*\\s+$","int.*\\s+$","bigint.*\\s+$","float.*\\s+$","double.*\\s+$","numeric.*\\s+$"};// 设置最后一行不以逗号结尾的行 String[] regex1={"nvarchar.*","datetime.*","bit.*","varchar.*","timestamp .*", "date.*","ntext.*","int.*","bigint.*","float.*","double.*","numeric.*\\s+$"}; for(int i=0;i<regex.length;i++){ Pattern pattern = Pattern.compile(regex[i]); Matcher matcher = pattern.matcher(lowLine); if(regex[i].startsWith("int") && regex[i].endsWith(",$")){ lowLine = matcher.replaceAll("int ,"); }else if(regex[i].startsWith("bigint") && regex[i].endsWith(",$")){ lowLine = matcher.replaceAll("bigint ,"); }else if(regex[i].startsWith("float") && regex[i].endsWith(",$")){ lowLine = matcher.replaceAll("float ,"); }else if(regex[i].startsWith("double") && regex[i].endsWith(",$")){ lowLine = matcher.replaceAll("double ,"); }else if(regex[i].startsWith("numeric") && regex[i].endsWith(",$")){ lowLine = matcher.replaceAll("double ,"); }else if(regex[i].startsWith("int") && regex[i].endsWith("+$")){ lowLine = matcher.replaceAll("int"); }else if(regex[i].startsWith("bigint") && regex[i].endsWith("+$")){ lowLine = matcher.replaceAll("bigint"); }else if(regex[i].startsWith("float") && regex[i].endsWith("+$")){ lowLine = matcher.replaceAll("float"); }else if(regex[i].startsWith("double") && regex[i].endsWith("+$")){ lowLine = matcher.replaceAll("double"); }else if(regex[i].startsWith("numeric") && regex[i].endsWith("+$")){ lowLine = matcher.replaceAll("double"); }else{ if(regex[i].endsWith("+$")){ lowLine = matcher.replaceAll("string "); } if(regex[i].endsWith(",$")){ lowLine = matcher.replaceAll("string ,"); } } } } if(count==2){ String str="row format delimited\n" + "fields terminated by '\\t' \n" + "STORED AS TEXTFILE \n" + "location '"+paths+fileName+"' ;"; outData.add(str); count++; } if(lowLine.endsWith("(") || lowLine.endsWith(")")){ count++; } if(!lowLine.equals("go")){ outData.add(lowLine); } } if(lowLine.equals("go")){ num++; } } // 在最后要新增的行数据 if(!outData.isEmpty()){ bw = new BufferedWriter(new FileWriter(new File(outFile+fileName+".sql"))); for(String s : outData){ bw.write(s + "\r\n"); } } }catch(Exception e){ e.printStackTrace(); }finally{ if(bs != null){ bs.close(); } if(bw != null){ bw.close(); } } }}
0 0
- java读取文件后修改,并写入到另一个文件
- java读取excel文件并写入另一个excel文件
- 通过java的io流将本地文件读取到控制台,并将文件内容再次写入另一个文件中
- 读出一个文本文件,并在前面加上行号后,写入到另一个文件的简单例子
- java如何读取文件到另一个文件
- 将文件写入到sdcard 并读取
- 使用Java读取xlxs文件和写入txt文件,并将数据写入到本地文件
- java写入Excel并读取文件
- Java读取Excel文件并写入数据库
- 利用Java读取并写入Word文件
- 利用Java读取并写入Word文件
- 利用Java读取并写入Word文件
- java 把一个文件写入到另一个文件中
- 读取一个文件写入另一个文件
- java创建文件,并向文件中写入字符串,读取字符串到屏幕
- java读取Excel数据,然后写入到txt文件,并批量保存到oracle数据库中
- php 将文件A逐行读取后提取部分数据写入另一个文件B
- 从文件中读取学生信息和分数,求出平均分后升序写入另一个文件。
- Redis主从之从Redis服务器Key不失效
- 滑动插件scroll.js
- json数据如何存入到cookie中,如何获取
- Codeforces Round #371 (Div. 1) C. Sonya and Problem Wihtout a Legend(贪心+DP)
- 无废话WCF入门教程六[一个简单的Demo]
- java读取文件后修改,并写入到另一个文件
- Flask config方法
- 问题
- MPU6050姿态融合(转载)
- 一段监控cli模式下运行php十分正常运行的shell脚本
- systrace使用方式
- cos在Struts2上传文件IO报错及其解决方案
- Node.js开发的WeMall 6.0正式发布
- CodeForces 358A - Dima and Continuous Line(模拟)