java文件处理保留注释_Java简单应用之去除SQL文件注释

工作中可能有些时候需要提供Sql脚本,某些脚本中可能有注释,可以使用Java对Sql脚本做简单的处理,把Sql文件中的注释去掉。

以Oracle脚本为例,Mysql脚本我没写,Oracle中常见注释有2种注释。

单行注释: --

多行注释:/**/

只要把出现注释的地方去掉就可以了,详情见代码,代码注释写的很详细了。

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

public class Sql语句处理 {

public static void main(String[] args) throws Exception {

Sql语句处理 t = new Sql语句处理();

String content = new String(t.processSqlContent(

"f:/saveFile/tmp/c/testdb.sql", "utf-8"));

System.out.println(content);

t.writeStrToFile(content,"f:/saveFile/tmp/c/testdb.sql", "utf-8");

}

public String processSqlContent(String filePath, String charSet)

throws Exception {

if (charSet == null) {

charSet = "utf-8";

}

BufferedReader br = new BufferedReader(new InputStreamReader(

new FileInputStream(filePath), charSet));

StringBuffer contentBuffer = new StringBuffer(5120);

String temp = null;

String tmpResult = null;

boolean isStart = false;

while ((temp = br.readLine()) != null) {

//去空格和;

tmpResult = new String(temp.replaceAll(";", " ").replaceAll("\\s{2,}", " "));

if (tmpResult != null) {

//去除同一行/* */注释

if(tmpResult.indexOf("/*")!=-1&&tmpResult.indexOf("*/")!=-1)

{

//最小匹配

tmpResult=tmpResult.replaceAll("\\/\\*.*?\\*\\/", "");

}else if (tmpResult.indexOf("/*") != -1&&tmpResult.indexOf("*/") == -1&&tmpResult.indexOf("--")==-1) {

// /*开始

isStart = true;

}else if(tmpResult.indexOf("/*")!=-1&&tmpResult.indexOf("--")!=-1&&tmpResult.indexOf("--")

{

//同时存在--/*

tmpResult=tmpResult.replaceAll("--.*", "");

}

if (isStart && tmpResult.indexOf("*/") != -1) {

// */结束

isStart = false;

continue;

}

// 去除同一行的--注释

tmpResult = new String(tmpResult.replaceAll("--.*", ""));

}

if (!isStart) {

//保留换行符

//contentBuffer.append(tmpResult).append("\r\n");

//无换行符

contentBuffer.append(tmpResult);

}

}

temp = contentBuffer.toString();

//保留换行符

//temp = new String(temp.replaceAll("\\s{2,}\\r\\n"," "));

//无换行符

temp = new String(temp.replaceAll("\\s{2,}", " "));

return temp;

}

public String getFileContent(String fileName, String chartSet)

throws Exception {

if (chartSet == null) {

chartSet = "utf-8";

}

StringBuffer buffer = new StringBuffer(5120);

String line = null;

InputStream is = new FileInputStream(fileName);

BufferedReader reader = new BufferedReader(new InputStreamReader(is,

chartSet));

while ((line = reader.readLine()) != null) {

buffer.append(line).append("\r\n");

}

return buffer.toString();

}

public void writeStrToFile(String str, String filePath, String charsetName)

throws Exception {

if (charsetName == null) {

charsetName = "utf-8";

}

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(

filePath), charsetName);

out.write(str);

out.close();

}

}

测试文件:

select

--注释/*注释*/

* --去全部

/*注释*/

/*测试--*/

from emp --从emp取数据/**测试

/*

测试注释

--注释*/

/*--测试*/

/*多行注释*/

/**2B注释*/

/* *

*取dept=10 日期小于1998的数据

*/

/*select *

from emp

where 1 = 1

and deptno = 12

--and hiredate < to_date('2013-10-01', 'yyyy-mm-dd')*/

where /**/

1 = /*注释--这也是注释*/

/*注释*/

1 --1=1

and deptno = /*--*/ /*注释---*/

10 --部门

/*

注释//嵌套注释*/

and /*时间字段*/

hiredate /*测试注释/*测试注释*/

< /*日期小于1998*/

to_date('1998-10-01', 'yyyy-mm-dd' /*年月日格式*/)

处理结果:

040f256f176ac1ac18e3e9e396c5c52b.png

写的不好的地方请指出,代码写的很匆忙,如有错误也请指出,转载请注明出处。谢谢。

全文完。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值