操作环境:
jdk 1.7
eclipse
我以前一直是写C#的,由于公司换了新的系统(从北京总部挪来的),前端是C#,后端是Java,开始逐渐写Java代码,由于水平有限,有写得不对的地方请多多指教
写本文的目的在于捕获sql并写到txt文件中,方便查询
具体步骤如下:
1 在Eclipse中安装插件Eclipse Class Decompiler
参考链接:https://blog.csdn.net/qq_33966061/article/details/85341106 我是通过这里的github下载后本地安装的
https://www.cnblogs.com/godtrue/p/5499785.html
2 把你要修改的.class字节码文件,记为A,按住鼠标直接拖拽到Eclipse中,这样你就可以看到Java源码了,你把Java代码拷贝出来备用
3 在Eclipse中新建一个项目,并把A需要的jar包(其实把包含A的jar包也引进来也没关系)全部引入到项目中,导入Jar包参考:https://blog.csdn.net/lingyiwin/article/details/102540315中的方式1
4 在新建的项目中,新建类B.java,类名称和包名必须和A都保持一致,编写完毕后,保存,并来到项目的bin目录,找到B.class,拷贝出来备用
5 找到A对应的jar包,解压,记为C目录,并把B.class替换替换目录C中的A
6 重新把C目录打成jar包
6.1 在cmd中尝试输入 jar命令,如果出现如下图的提示,
那就需要把jdk安装目录中bin目录配置到环境变量path中,我的是C:\Program Files\Java\jdk1.7.0_80\bin,如下图:
6.2 对C目录进行打包,进入C目录(一定要进入C目录),输入cmd,弄出dos黑窗口,并输入命令
jar cvfM0 包名.jar *
如下图:
执行完毕后,这样,在C目录下就生成你想要的jar包了,然后拷贝覆盖原来的jar包就行了
文章到此,全部介绍完毕
下面的java代码额外送的
在window系统桌面新增txt文件并写入文本内容
package Test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.filechooser.FileSystemView;
public class FileHelper {
String updateSqlFilePath=getDeskTopFilePath()+"//更新的sql.txt";
String selectSqlFilePath=getDeskTopFilePath()+"//查询的sql.txt";
File fUpdate=new File(updateSqlFilePath);
File fSelect=new File(selectSqlFilePath);
FileOutputStream fsUpate;
FileOutputStream fsSelect;
private String getDeskTopFilePath()
{
FileSystemView fsv = FileSystemView.getFileSystemView();
File com=fsv.getHomeDirectory();
return com.getPath();
}
public void WriteUpdateSql(String updateSql)
{
try {
fsUpate=new FileOutputStream(fUpdate,true);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
OutputStreamWriter dos=new OutputStreamWriter(fsUpate);
try {
Date day=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dos.write(df.format(day)+"\t"+updateSql+"\r\n \r\n \r\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void WriteSelectSql(String selectSql)
{
try {
fsSelect=new FileOutputStream(fSelect,true);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
OutputStreamWriter dos=new OutputStreamWriter(fsSelect);
try {
Date day=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dos.write(df.format(day)+"\t"+selectSql+"\r\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}