qq天气星座屋每日运势运势每天不能更新了求解

114网址导航1188人阅读
public static void editJar(String file,String EntryName,byte[] data)
{//修改jar
JarFile jf = new JarFile(file);
TreeMap tm = new TreeMap();
Enumeration es = jf.entries();
while(es.hasMoreElements())
JarEntry je = (JarEntry)es.nextElement();
byte[] b = getByte(jf.getInputStream(je));
tm.put(je.getName(),b);
JarOutputStream out = new JarOutputStream(new FileOutputStream(file));
Set set = tm.entrySet();
Iterator it = set.iterator();
boolean has =
while(it.hasNext())
Map.Entry me = (Map.Entry)it.next();
String name = (String)me.getKey();
JarEntry jeNew = new JarEntry(name);
out.putNextEntry(jeNew);
if(name.equals(EntryName))
b = (byte[])me.getValue();
out.write(b,0,b.length);
JarEntry jeNew = new JarEntry(EntryName);
out.putNextEntry(jeNew);
out.write(data,0,data.length);
out.finish();
out.close();
}catch(Exception e){}
配置文件和类文件一起打包到一个Jar中,如何读取/修改这个配置文件?
---------------------------------------------------------------
String currentJarPath = URLDecoder.decode(YourClassName.class.getProtectionDomain().getCodeSource().getLocation().getFile(), &UTF-8&); //获取当前Jar文件名,并对其解码,防止出现中文乱码
JarFile currentJar = new JarFile(currentJarPath);
JarEntry dbEntry = currentJar.getJarEntry(&包名/配置文件&);
InputStream in = currentJar.getInputStream(dbEntry);
//以上YourClassName是class全名,也就是包括包名
JarOutputStream out = new FileOutputStream(currentJarPath);
out.putNextEntry(dbEntry);
out.write(byte[] b, int off, int len);
//写配置文件
out.close();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:157768次
积分:2597
积分:2597
排名:第11337名
原创:95篇
转载:28篇
评论:62条
(1)(2)(3)(2)(2)(7)(1)(5)(3)(1)(1)(2)(1)(1)(2)(1)(4)(10)(6)(6)(10)(16)(35)(1)& & 开发这个小工具的初衷是为了修改工具 jar 包中的配置文件& & 本来打算将这个功能集成到 工具 jar 包自身& & 但是这里貌似有点儿问题,因为该 jar 包文件当前正在被 java 虚拟机使用,所以无法对其进行修改操作~& & 这里我有点儿疑惑,难道不是将 jar 包整个加载到内存中去了么?& & 为什么磁盘上的物理文件还是被牢牢锁定?mac上是这样,windows里面也是这样,应该有点儿蹊跷,不深究了~& & 本示例主要包含了以下知识点:& & 1。遍历 jar 文件中的所有文件(jar包实际上就是zip压缩包,没什么神奇的)& & 2。就像读取磁盘中的其他文件一样,对jar执行 读入和写出操作& & 3。将 jar文件中的某个文件读到 swing的 jTextArea 里面,在退出的时候将修改过的文字覆盖回原文件& & 4。将InputStream 安全的转换为 byte[] 数组& & 5。拖拽取得文件的完整路径& & 下面直接上代码实例:& & [java] package org.bruce.vertices.& & import java.awt.T& & import java.awt.datatransfer.DataF& & import java.awt.dnd.DnDC& & import java.awt.dnd.DropT& & import java.awt.dnd.DropTargetA& & import java.awt.dnd.DropTargetDropE& & import java.awt.event.WindowA& & import java.awt.event.WindowE& & import java.io.ByteArrayOutputS& & import java.io.F& & import java.io.FileOutputS& & import java.io.IOE& & import java.io.InputS& & import java.util.E& & import java.util.I& & import java.util.LinkedL& & import java.util.L& & import java.util.jar.JarE& & import java.util.jar.JarF& & import java.util.jar.JarOutputS& & import java.util.zip.ZipE& & import javax.swing.JF& & import javax.swing.JOptionP& & import javax.swing.JScrollB& & import javax.swing.JScrollP& & import javax.swing.JTextA& & /**& & * @author Bruce Yang& & * PS:本示例专门用于编辑我自己制作的一个 jar 文件的属性文件,& & * 是不具备通用性的。不过源码既然放出,变得适应各种不同的需求,自然是不存在什么难题~& & * 为了方便地提供最基本的适应需求,主要将 configPath 修改为各自 jar包中 配置文件的 classPath 即可~& & * 一言以蔽之:& & * 这个工具主要起到了快捷修改jar文件中某个配置文件的作用~& & * 遗憾的是,还有一些需求我没能完成,诸如怎么将JTextArea中属性文件的内容修改的和elcipse中打开属性文件一样,& & * 那样的话,&=&,&true&,&false&,整数等值具备了不同高亮颜色的话,看起来就舒服多了~& & * 各位有兴趣可以试试,据我目前所知,JTextPane貌似更加适合做这个功能,但是有些小细节我不明了。。。& & * 如有对这个同样感兴趣且扩展出上述&高亮&功能的大侠,还请给我邮一份,不甚感激!& & * 在下邮箱:& & */& & public class JarCfgEditor extends JFrame. {& & private static final long serialVersionUID = -6731094L;& & public String configPath = "org/bruce/vertices/resources/DefaultCfg.properties";& & public static final int CONSOLE_DIALOG_WIDTH = 500;& & public static final int CONSOLE_DIALOG_HEIGHT = 400;& & private JScrollP& & private JTextA& & private F& & private void initMemberVariables() {& & jta = new JTextArea();& & jsp = new JScrollPane();& & }& & public JarCfgEditor() {& & super();& & this.initMemberVariables();& & this.setSize(500, 400);& & jsp.setViewportView(jta);& & this.add(jsp);& & JScrollBar jsb = jsp.getVerticalScrollBar();& & jsb.setValue(jsb.getMaximum());& & int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().& & int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().& & this.setLocation((screenWidth-CONSOLE_DIALOG_WIDTH)/2,& & (screenHeight-CONSOLE_DIALOG_HEIGHT)/2);& & /** 关闭的时候将修改过的属性覆盖到 jar 里面的属性配置文件~ */& & this.addWindowListener(new WindowAdapter() {& & public void windowClosing(WindowEvent arg0) {& & if(original != null) {& & write2JarFile();& & }& & System.exit(0);& & }& & });& & new DropTarget(jta, DnDConstants.ACTION_COPY_OR_MOVE, new MyDropTargetListener(this));& & this.setTitle("CfgViewer0.1");& & this.setVisible(true);& & }& & /**& & * 写入jar文件的话会将 jar文件原来的内容统统抹掉!!切记!!~& & */& & private void write2JarFile() {& & String riginalPath = original.getAbsolutePath();& & /** 创建一个临时文件来做暂存,待一切操作完毕之后会将该文件重命名为原文件的名称(原文件会被删除掉)~ */& & String tempPath = originalPath.substring(0, originalPath.length()-4) + "_temp.jar";& & System.out.println(tempPath);& & JarFile riginalJar =& & try {& & riginalJar = new JarFile(originalPath);& & } catch (IOException e1) {& & e1.printStackTrace();& & }& & List lists = new LinkedList();& & for(Enumeration entrys = originalJar.entries(); entrys.hasMoreElements();) {& & JarEntry jarEntry = entrys.nextElement();& & //&&&&&&&&&&&System.out.println(jarEntry.getName());& & lists.add(jarEntry);& & }& & // 定义一个 jaroutputstream 流& & File handled = new File(tempPath);& & JarOutputStream jos =& & try {& & FileOutputStream fos = new FileOutputStream(handled);& & jos = new JarOutputStream(fos);& & /**& & * 将源文件中的内容复制过来~& & * 可以利用循环将一个文件夹中的文件都写入jar包中 其实很简单& & */& & for(JarEntry je : lists) {& & // jar 中的每一个文件夹 每一个文件 都是一个 jarEntry& & JarEntry newEntry = new JarEntry(je.getName());& & //&&&&&&&&&&&&&newEntry.setComment(je.getComment());& & //&&&&&&&&&&&&&newEntry.setCompressedSize(je.getCompressedSize());& & //&&&&&&&&&&&&&newEntry.setCrc(je.getCrc());& & //&&&&&&&&&&&&&newEntry.setExtra(je.getExtra());& & //&&&&&&&&&&&&&newEntry.setMethod(je.getMethod());& & //&&&&&&&&&&&&&newEntry.setTime(je.getTime());& & //&&&&&&&&&&&&&System.out.println(je.getAttributes());& & /** 这句代码有问题,会导致将jar包重命名为zip包之后无法解压缩~ */& & //&&&&&&&&&&&&&newEntry.setSize(je.getSize());& & // 表示将该entry写入jar文件中 也就是创建该文件夹和文件& & jos.putNextEntry(newEntry);& & /** 如果当前已经处理到属性文件了,那么将在 JTextArea 中编辑过的文本写入到该属性文件~ */& & if(je.getName().equals(configPath)) {& & jos.write(jta.getText().getBytes());& && & }& & InputStream is = originalJar.getInputStream(je);& & byte[] bytes = inputStream2byteArray(is);& & is.close();& & // 然后就是往entry中的jj.txt文件中写入内容& & jos.write(bytes);& & }& & // 最后不能忘记关闭流& & jos.close();& & fos.close();& & /** 删除原始文件,将新生成的文件重命名为原始文件的名称~ */& & original.delete();& & handled.renameTo(new File(originalPath));& & } catch (Exception e) {& & e.printStackTrace();& & }& & }& & /**& & * InputStream 转 byte[]~& & * @param is& & * @return& & */& & public static byte[] inputStream2byteArray(InputStream is) {& & ByteArrayOutputStream baos = new ByteArrayOutputStream();& && & try {& & while((i = is.read()) != -1) {& & baos.write(i);& & }& & baos.close();& & } catch (IOException e) {& & e.printStackTrace();& & }& & byte[] bytes = baos.toByteArray();& && & }& & /** getters && setters~ */& & public JTextArea getJta() {& && & }& & public void setJta(JTextArea jta) {& & this.jta =& & }& & public File getJarFile() {& && & }& & public void setJarFile(File jarFile) {& & this.original = jarF& & }& & /**& & * 主方法~& & * @param args& & */& & public static void main(String[] args) {& & new JarCfgEditor();& & }& & }& & /**& & * @author Bruce Yang& & * 拖拽监听~& & */& & class MyDropTargetListener extends DropTargetAdapter {& & private JarCfgE& & public MyDropTargetListener(JarCfgEditor jce) {& & this.jce =& & }& & @Override& & @SuppressWarnings("unchecked")& & public void drop(DropTargetDropEvent event) {& & if (event.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {& & event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);& & DataFlavor df = DataFlavor.javaFileListF& & List list =& & try {& & list = (List)(event.getTransferable().getTransferData(df));& & } catch (Exception e) {& & e.printStackTrace();& & }& & Iterator iterator = list.iterator();& & while (iterator.hasNext()) {& & File file = iterator.next();& & if(file.exists() && file.isFile()) {& & String filePath = file.getAbsolutePath();& & if(filePath == null || filePath.equals("")) {& & System.out.println("文件名为 null 或为 \"\"~");& && & }& & if(!filePath.contains("GetVerticesMVC") || !filePath.endsWith(".jar")) {& & String str = "此工具专门为 GetVerticesMVC 设计,不通用!! 请注意!!";& & JOptionPane.showMessageDialog(null, str);& && & }& & System.out.println("jarFilePath=" + filePath);& & jce.setJarFile(file);& & JarFile jarFile =& & try {& & jarFile = new JarFile(filePath);& & ZipEntry entry = jarFile.getEntry(jce.configPath);& & if(entry == null) {& & System.out.println(jce.configPath+"路径所代表的文件不存在!读取失败~");& & // 安全起见,将 jarFile 置为 null,这样在关闭窗口的时候将不会执行收尾操作~& & jce.setJarFile(null);& && & }& & //获取到inputstream了 就相当简单了& & InputStream is = jarFile.getInputStream(entry);& & byte[] bytes = JarCfgEditor.inputStream2byteArray(is);& & String cfgStr = new String(bytes);& & jce.getJta().setText(cfgStr);& & } catch (IOException e) {& & e.printStackTrace();& & }& & }& & // 一次只能处理一个,要避免处理多个的情况,因此 break 跳出~& && & }& & event.dropComplete(true);& & } else {& & event.rejectDrop();& & }& & }& & }& & package org.bruce.vertices.& & import java.awt.T& & import java.awt.datatransfer.DataF& & import java.awt.dnd.DnDC& & import java.awt.dnd.DropT& & import java.awt.dnd.DropTargetA& & import java.awt.dnd.DropTargetDropE& & import java.awt.event.WindowA& & import java.awt.event.WindowE& & import java.io.ByteArrayOutputS& & import java.io.F& & import java.io.FileOutputS& & import java.io.IOE& & import java.io.InputS& & import java.util.E& & import java.util.I& & import java.util.LinkedL& & import java.util.L& & import java.util.jar.JarE& & import java.util.jar.JarF& & import java.util.jar.JarOutputS& & import java.util.zip.ZipE& & import javax.swing.JF& & import javax.swing.JOptionP& & import javax.swing.JScrollB& & import javax.swing.JScrollP& & import javax.swing.JTextA& & /**& & * @author Bruce Yang& & * PS:本示例专门用于编辑我自己制作的一个 jar 文件的属性文件,& & * 是不具备通用性的。不过源码既然放出,变得适应各种不同的需求,自然是不存在什么难题~& & * 为了方便地提供最基本的适应需求,主要将 configPath 修改为各自 jar包中 配置文件的 classPath 即可~& & * 一言以蔽之:& & * 这个工具主要起到了快捷修改jar文件中某个配置文件的作用~& & * 遗憾的是,还有一些需求我没能完成,诸如怎么将JTextArea中属性文件的内容修改的和elcipse中打开属性文件一样,& & * 那样的话,&=&,&true&,&false&,整数等值具备了不同高亮颜色的话,看起来就舒服多了~& & * 各位有兴趣可以试试,据我目前所知,JTextPane貌似更加适合做这个功能,但是有些小细节我不明了。。。& & * 如有对这个同样感兴趣且扩展出上述&高亮&功能的大侠,还请给我邮一份,不甚感激!& & * 在下邮箱:& & */& & public class JarCfgEditor extends JFrame. {& & private static final long serialVersionUID = -6731094L;& & public String configPath = "org/bruce/vertices/resources/DefaultCfg.properties";& & public static final int CONSOLE_DIALOG_WIDTH = 500;& & public static final int CONSOLE_DIALOG_HEIGHT = 400;& & private JScrollP& & private JTextA& & private F& & private void initMemberVariables() {& & jta = new JTextArea();& & jsp = new JScrollPane();& & }& & public JarCfgEditor() {& & super();& & this.initMemberVariables();& & this.setSize(500, 400);& & jsp.setViewportView(jta);& & this.add(jsp);& & JScrollBar jsb = jsp.getVerticalScrollBar();& & jsb.setValue(jsb.getMaximum());& & int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().& & int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().& & this.setLocation((screenWidth-CONSOLE_DIALOG_WIDTH)/2,& & (screenHeight-CONSOLE_DIALOG_HEIGHT)/2);& & /** 关闭的时候将修改过的属性覆盖到 jar 里面的属性配置文件~ */& & this.addWindowListener(new WindowAdapter() {& & public void windowClosing(WindowEvent arg0) {& & if(original != null) {& & write2JarFile();& & }& & System.exit(0);& & }& & });& & new DropTarget(jta, DnDConstants.ACTION_COPY_OR_MOVE, new MyDropTargetListener(this));& & this.setTitle("CfgViewer0.1");& & this.setVisible(true);& & }& & /**& & * 写入jar文件的话会将 jar文件原来的内容统统抹掉!!切记!!~& & */& & private void write2JarFile() {& & String riginalPath = original.getAbsolutePath();& & /** 创建一个临时文件来做暂存,待一切操作完毕之后会将该文件重命名为原文件的名称(原文件会被删除掉)~ */& & String tempPath = originalPath.substring(0, originalPath.length()-4) + "_temp.jar";& & System.out.println(tempPath);& & JarFile riginalJar =& & try {& & riginalJar = new JarFile(originalPath);& & } catch (IOException e1) {& & e1.printStackTrace();& & }& & List lists = new LinkedList();& & for(Enumeration entrys = originalJar.entries(); entrys.hasMoreElements();) {& & JarEntry jarEntry = entrys.nextElement();& & //&&&&&&&&&&&System.out.println(jarEntry.getName());& & lists.add(jarEntry);& & }& & // 定义一个 jaroutputstream 流& & File handled = new File(tempPath);& & JarOutputStream jos =& & try {& & FileOutputStream fos = new FileOutputStream(handled);& & jos = new JarOutputStream(fos);& & /**& & * 将源文件中的内容复制过来~& & * 可以利用循环将一个文件夹中的文件都写入jar包中 其实很简单& & */& & for(JarEntry je : lists) {& & // jar 中的每一个文件夹 每一个文件 都是一个 jarEntry& & JarEntry newEntry = new JarEntry(je.getName());& & //&&&&newEntry.setComment(je.getComment());& & //&&&&newEntry.setCompressedSize(je.getCompressedSize());& & //&&&&newEntry.setCrc(je.getCrc());& & //&&&&newEntry.setExtra(je.getExtra());& & //&&&&newEntry.setMethod(je.getMethod());& & //&&&&newEntry.setTime(je.getTime());& & //&&&&System.out.println(je.getAttributes());& & /** 这句代码有问题,会导致将jar包重命名为zip包之后无法解压缩~ */& & //&&&&newEntry.setSize(je.getSize());& & // 表示将该entry写入jar文件中 也就是创建该文件夹和文件& & jos.putNextEntry(newEntry);& & /** 如果当前已经处理到属性文件了,那么将在 JTextArea 中编辑过的文本写入到该属性文件~ */& & if(je.getName().equals(configPath)) {& & jos.write(jta.getText().getBytes());& && & }& & InputStream is = originalJar.getInputStream(je);& & byte[] bytes = inputStream2byteArray(is);& & is.close();& & // 然后就是往entry中的jj.txt文件中写入内容& & jos.write(bytes);& & }& & // 最后不能忘记关闭流 & & jos.close();& & fos.close();& & /** 删除原始文件,将新生成的文件重命名为原始文件的名称~ */& & original.delete();& & handled.renameTo(new File(originalPath));& & } catch (Exception e) {& & e.printStackTrace();& & }& & }& & /**& & * InputStream 转 byte[]~& & * @param is& & * @return& & */& & public static byte[] inputStream2byteArray(InputStream is) {& & ByteArrayOutputStream baos = new ByteArrayOutputStream();& && & try {& & while((i = is.read()) != -1) {& & baos.write(i);& & }& & baos.close();& & } catch (IOException e) {& & e.printStackTrace();& & }& & byte[] bytes = baos.toByteArray();& && & }& & /** getters && setters~ */& & public JTextArea getJta() {& && & }& & public void setJta(JTextArea jta) {& & this.jta =& & }& & public File getJarFile() {& && & }& & public void setJarFile(File jarFile) {& & this.original = jarF& & }& & /**& & * 主方法~& & * @param args& & */& & public static void main(String[] args) {& & new JarCfgEditor();& & }& & }& & /**& & * @author Bruce Yang& & * 拖拽监听~& & */& & class MyDropTargetListener extends DropTargetAdapter {& & private JarCfgE& & public MyDropTargetListener(JarCfgEditor jce) {& & this.jce =& & }& & @Override& & @SuppressWarnings("unchecked")& & public void drop(DropTargetDropEvent event) {& & if (event.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {& & event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);& & DataFlavor df = DataFlavor.javaFileListF& & List list =& & try {& & list = (List)(event.getTransferable().getTransferData(df));& & } catch (Exception e) {& & e.printStackTrace();& & }& & Iterator iterator = list.iterator();& & while (iterator.hasNext()) {& & File file = iterator.next();& & if(file.exists() && file.isFile()) {& & String filePath = file.getAbsolutePath();& & if(filePath == null || filePath.equals("")) {& & System.out.println("文件名为 null 或为 \"\"~");& && & }& & if(!filePath.contains("GetVerticesMVC") || !filePath.endsWith(".jar")) {& & String str = "此工具专门为 GetVerticesMVC 设计,不通用!! 请注意!!";& & JOptionPane.showMessageDialog(null, str);& && & }& & System.out.println("jarFilePath=" + filePath);& & jce.setJarFile(file);& & JarFile jarFile =& & try {& & jarFile = new JarFile(filePath);& & ZipEntry entry = jarFile.getEntry(jce.configPath);& & if(entry == null) {& & System.out.println(jce.configPath+"路径所代表的文件不存在!读取失败~");& & // 安全起见,将 jarFile 置为 null,这样在关闭窗口的时候将不会执行收尾操作~& & jce.setJarFile(null);& && & }& & //获取到inputstream了 就相当简单了& & InputStream is = jarFile.getInputStream(entry);& & byte[] bytes = JarCfgEditor.inputStream2byteArray(is);& & String cfgStr = new String(bytes);& & jce.getJta().setText(cfgStr);& & } catch (IOException e) {& & e.printStackTrace();& & }& & }& & // 一次只能处理一个,要避免处理多个的情况,因此 break 跳出~& && & }& & event.dropComplete(true);& & } else {& & event.rejectDrop();& & }& & }& & }& & 摘自&yang3wei的专栏
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
论文写作技巧
上一篇:下一篇:
相关经验教程有个别人写的jar包。我想修改里面的一个class,然后再打jar包,还原回去,怎么办? -Java- TryCatch
>> Content
有个别人写的jar包。我想修改里面的一个class,然后再打jar包,还原回去,怎么办?
这个jar包是原来一个同事写的,有源代码大概50多兆,里面的内容如下:settings文件夹bin文件夹classes文件夹conf文件夹lib文件夹src文件夹.classpath.project打好的jar包,只有3兆多,内容如下:com--包含了源文件里src目录下java文件对应的所有class类META-INFbuild.xml我用myeclipse的导入存在project,来导入源代码没问题。但是当我用导出archive&file时,选择那个导入的工程,然后导出到test.jar时,这个jar包居然有50多兆,请问该怎么办?myeclipse好像把conf里的东西都打成jar包了
------Solutions------
可以告诉你基本不可能&因为反编译的class文件生成java文件的时候会丢失很多东西,虽然能看到一些
------Solutions------
1、导出的时候,是可以选择导出的内容的,选择你想要导出的就导出就行2、也可以替换类,讲那个编译好的class文件,覆盖jar文件里对应的class就行
------Solutions------
3、如果没有源码,&反编译也行,用JD-GUI反编译出源码,将你要修改的类挑出来放工程里面,将这个jar文件添加到classpath中,然后,修改源文件,然后&将编译好得class替换到jar中
------Solutions------
你真牛啊,还会修改.class文件
------Solutions------
引用&1&楼&ylovep&的回复:可以告诉你基本不可能&因为反编译的class文件生成java文件的时候会丢失很多东西,虽然能看到一些只要编译成CLASS前没有别源码处理&完全没问题&什么叫基本不可能?
------Solutions------
大家不要误会,这个是自己公司的代码,源码是有的现在源码里包含的内容和与jar包里的内容不一样。我是不是应该在修改了某个java文件后,在打jar包的时候,选择原来jar包中有的文件?这样就没问题了吧?
------Solutions------
我现在想在源代码里把1个java文件修改了,然后导出到jar包。然后把原来的jar包,改名为rar包,解压缩后,用上一步生成的jar包里的那个class替换原jar包内的那个class文件。然后压缩成rar包,再改名为jar包,可以吗?
------Solutions------
我刚才可能没说清楚,源代码我叫A吧,导出的jar包叫AA现在,我修改源代码A里的一个java文件AAA,然后导出一个新的jar包BB。然后把这个jar包BB,后缀改为rar,并解压缩后,取出已经被修改的AAA.java对应的那个class文件BBB.class。现在把原来的jar包AA的后缀也改为rar,并解压缩到AAAA文件夹,用BBB.class代替原来那个AAA.java对应的AAA.class。最后把替换过class文件的AAAA文件夹,压缩到cc.rar,然后改后缀为cc.jar。用这个新生成的cc.jar替换服务器上的那个AA.jar,可以吗?小弟初学myeclipse,一切都是想象,大家帮忙确定下,多谢
------Solutions------
引用&5&楼&zhuchao_ko&的回复:引用&1&楼&ylovep&的回复:可以告诉你基本不可能&因为反编译的class文件生成java文件的时候会丢失很多东西,虽然能看到一些只要编译成CLASS前没有别源码处理&完全没问题&什么叫基本不可能?不相信自己可以试一下&
------Solutions------
引用&8&楼&charlesxu&的回复:我刚才可能没说清楚,源代码我叫A吧,导出的jar包叫AA现在,我修改源代码A里的一个java文件AAA,然后导出一个新的jar包BB。然后把这个jar包BB,后缀改为rar,并解压缩后,取出已经被修改的AAA.java对应的那个class文件BBB.class。现在把原来的jar包AA的后缀也改为rar,并解压缩到AAAA文件夹,用BBB.class代替原来那个AAA.ja……有点蒙
------Solutions------
搞那么麻烦干嘛?
------Solutions------
我也不想这么麻烦,有源文件,和它导出的jar包。想修改其中一个java文件,然后导出一个新的jar包。但是担心新导出的jar包和以前的jar包配置上有不一样的。所以想把新导出jar包内的class替换原来jar包内的class,行不行?
------Solutions------
使用&jar&的&-u&选项。ant的jar&task&也可以&update="true"
------Solutions------
jar&的-u?听不懂,说具体点吧
------Solutions------
看了下jar&-u的使用方法,如果我这样jar&-u&hello.jar&test.java写,能把test.java编译成class文件然后放到hello.jar包里吗?还有我的test.java上面有package&com.test1.test2.test3,用jar&-u能把test.class放到那个目录下,替换原来的class文件吗?
------Solutions------
这个很简单啊,你在工程里倒入那个jar包,然后写个类继承你要修改的类,重写下要修改的方法;写好了后,运行你的程序,就会产生你自己类的class文件,用rar打开jar包,把心生成的class文件丢进去就可以了。
------Solutions------
mkdir&classes&javac&-d&classes&XXXX.java&&&&//&你修改过的java文件jar&uf&xxxx.jar&-C&classes&.我这样修改成功了。先把你的jar文件备份一下。
------Solutions------
直接在myeclipse里导入源程序,修改java文件后,编译。用编译后生成的class替换原来jar包里的class可以吗?
------Solutions------
1&根据源码重新打包,打的时候选一下哪些要到处到jar,哪些不导出,即可。2&【危险】,用winzip加压原来的jar,新做的jar,解压后用新class覆盖老class;用winzip打包,选压缩格式为zip格式
------Solutions------
嗯,我本来是想修改源码后打包的,但是myeclipse的导出jar包里要选作为入口的class。源程序的作者走了,我又不知道,就想用winrar打开原来的jar包,然后用编译后的class替换原来的。不知道行不行?
------Solutions------
反编译&&想怎么弄&怎么弄。。
------Solutions------
别太复杂,既然有源代码,就不用反编译了。
------Solutions------
有源代码,以前的也有,为什么不全部重新打到jar包里?这不是和只改那一个效果一样吗?
------Solutions------
引用&9&楼&ylovep&的回复:引用&5&楼&zhuchao_ko&的回复:引用&1&楼&ylovep&的回复:可以告诉你基本不可能&因为反编译的class文件生成java文件的时候会丢失很多东西,虽然能看到一些只要编译成CLASS前没有别源码处理&完全没问题&什么叫基本不可能?不相信自己可以试一下宁波大市四大家的PORTAL我在维护&我就这样干的我会不知道?可笑了。好吧&除了别有用心的不算&我运气好&没碰到过。
------Solutions------
引用&8&楼&charlesxu&的回复:我刚才可能没说清楚,源代码我叫A吧,导出的jar包叫AA现在,我修改源代码A里的一个java文件AAA,然后导出一个新的jar包BB。然后把这个jar包BB,后缀改为rar,并解压缩后,取出已经被修改的AAA.java对应的那个class文件BBB.class。现在把原来的jar包AA的后缀也改为rar,并解压缩到AAAA文件夹,用BBB.class代替原来那个AAA.j……
------Solutions------
1.用JD-GUI反编译出源码重新创建一个project2.找到你要修改的类,修改后,找编译后的class3.用winrar打开原来的jar包,把这个class拖到目标位置,覆盖旧的class即可
------Solutions------
好巧楼主,我也做过。你可以按照我的试试。你把你需要改的类文件。改完编译好。找到编译好的文件复制一下。之后用WINRAR打开(注意是打开不是解压),然后找到相应的目标位置。直接复制进去就行了。希望对你有用
------Solutions------
直接压缩进去就行了。虽然很不正规。
------Solutions------

我要回帖

更多关于 星座屋每日运势 的文章

 

随机推荐