void backupJar(File fileFrom) throws IOException { JarEntry jarEntry;
byte[] buffer = new byte[1024];
JarInputStream jarIn;
JarOutputStream jarOut;
JarFile jarfile;
Manifest manifest; backFile = new File(fileFrom.getParentFile(), fileFrom.getName()
.replace(".jar", "_v1.jar"));
if (!backFile.exists())
backFile.createNewFile();
jarfile = new JarFile(fileFrom);
manifest = jarfile.getManifest();
jarIn = new JarInputStream(new FileInputStream(fileFrom));
jarOut = new JarOutputStream(new FileOutputStream(backFile), manifest);
while ((jarEntry = jarIn.getNextJarEntry()) != null) { if ("META-INF/MANIFEST.MF".equals(jarEntry.getName()))
continue;
jarOut.putNextEntry(jarEntry);
int read;
while ((read = jarIn.read(buffer)) != -1) {
jarOut.write(buffer, 0, read);
}
jarOut.closeEntry();
}
jarOut.flush();
jarOut.close();
jarIn.close();
}
通过上面的代码,我可以成功复制一个jar文件
但现在的问题是,我需要将原来jar文件中的某几个class更新为现在工程下的source目录中的的class文件,需要如何操作,我是这样考虑的,但是总是异常无法得到正确结果,还望高手能够帮助解决问题!!!
void updataFile(File fileFrom) throws IOException {
JarEntry jarEntry;
byte[] buffer = new byte[1024];
JarInputStream jarIn;
JarOutputStream jarOut;
JarFile jarfile;
Manifest manifest; File modifyFile = new File(fileFrom.getParentFile(), fileFrom.getName()
.replace(".jar", "_v2.jar"));
if (!modifyFile.exists())
modifyFile.createNewFile();
jarfile = new JarFile(fileFrom);
manifest = jarfile.getManifest(); jarIn = new JarInputStream(new FileInputStream(fileFrom));
jarOut = new JarOutputStream(new FileOutputStream(modifyFile), manifest);
while ((jarEntry = jarIn.getNextJarEntry()) != null) {
String jarName = jarEntry.getName(); if ("META-INF/MANIFEST.MF".equals(jarName))
continue; jarOut.putNextEntry(jarEntry); if (updateEntry.contains(jarName)) { //如果是需要更新的class的话
String name = "source\\"
+ jarName.substring(jarName.lastIndexOf("/") + 1); DataInputStream temp = new DataInputStream(new FileInputStream(name));
int read;
while ((read = temp.read(buffer)) != -1) {
jarOut.write(buffer, 0, read);
System.out.println(buffer);
} } else {
int read;
while ((read = jarIn.read(buffer)) != -1)
jarOut.write(buffer, 0, read);
System.out.println("---class--2--------> "
+ jarEntry.getName());
} jarOut.closeEntry();
}
jarOut.flush();
jarOut.close();
jarIn.close(); }
byte[] buffer = new byte[1024];
JarInputStream jarIn;
JarOutputStream jarOut;
JarFile jarfile;
Manifest manifest; backFile = new File(fileFrom.getParentFile(), fileFrom.getName()
.replace(".jar", "_v1.jar"));
if (!backFile.exists())
backFile.createNewFile();
jarfile = new JarFile(fileFrom);
manifest = jarfile.getManifest();
jarIn = new JarInputStream(new FileInputStream(fileFrom));
jarOut = new JarOutputStream(new FileOutputStream(backFile), manifest);
while ((jarEntry = jarIn.getNextJarEntry()) != null) { if ("META-INF/MANIFEST.MF".equals(jarEntry.getName()))
continue;
jarOut.putNextEntry(jarEntry);
int read;
while ((read = jarIn.read(buffer)) != -1) {
jarOut.write(buffer, 0, read);
}
jarOut.closeEntry();
}
jarOut.flush();
jarOut.close();
jarIn.close();
}
通过上面的代码,我可以成功复制一个jar文件
但现在的问题是,我需要将原来jar文件中的某几个class更新为现在工程下的source目录中的的class文件,需要如何操作,我是这样考虑的,但是总是异常无法得到正确结果,还望高手能够帮助解决问题!!!
void updataFile(File fileFrom) throws IOException {
JarEntry jarEntry;
byte[] buffer = new byte[1024];
JarInputStream jarIn;
JarOutputStream jarOut;
JarFile jarfile;
Manifest manifest; File modifyFile = new File(fileFrom.getParentFile(), fileFrom.getName()
.replace(".jar", "_v2.jar"));
if (!modifyFile.exists())
modifyFile.createNewFile();
jarfile = new JarFile(fileFrom);
manifest = jarfile.getManifest(); jarIn = new JarInputStream(new FileInputStream(fileFrom));
jarOut = new JarOutputStream(new FileOutputStream(modifyFile), manifest);
while ((jarEntry = jarIn.getNextJarEntry()) != null) {
String jarName = jarEntry.getName(); if ("META-INF/MANIFEST.MF".equals(jarName))
continue; jarOut.putNextEntry(jarEntry); if (updateEntry.contains(jarName)) { //如果是需要更新的class的话
String name = "source\\"
+ jarName.substring(jarName.lastIndexOf("/") + 1); DataInputStream temp = new DataInputStream(new FileInputStream(name));
int read;
while ((read = temp.read(buffer)) != -1) {
jarOut.write(buffer, 0, read);
System.out.println(buffer);
} } else {
int read;
while ((read = jarIn.read(buffer)) != -1)
jarOut.write(buffer, 0, read);
System.out.println("---class--2--------> "
+ jarEntry.getName());
} jarOut.closeEntry();
}
jarOut.flush();
jarOut.close();
jarIn.close(); }
解决方案 »
- 请教大神,能否从数据库查询返回的结果ResultSet对象中获得查询结果的字段名?
- 比较简单的一个问题,如何用 java.io.File访问windows的共享目录
- 一个很简单的正则表达式问题
- 我需要在Swing程序中嵌入水晶报表请问应该怎么做
- 100分求服务器同步问题,回帖又分
- 初学者菜鸟问题-回答详细给满分..
- JTextField如何用正册表达式指定输入格式?
- 我想下载j2sdk...听说才1M,,我找到的为什么是42M或更大?
- 包访问问题,解决给全分,快~急~
- 小弟要做毕业设计,请问有没有项目或建议(不要灌水)
- JFreeChart
- 如何用class类的getSuperClass()获取父类名?我测试怎么不行啊?
只用
jar xvf ***.jar
替换后
jar cvf ***.jar *.*
LZ找到好方法一定要通知我哦