Java,如何制作一个jar来编辑另一个jar

时间:2013-03-05 18:46:04

标签: java file-io executable-jar

我想出了一个想法,为我的学校制作一个程序,老师在那里输入问题并回答A,B,C,D等等。当它完成时创建一个jar文件,这将是实际的测试程序。现在我知道如何使程序达到收集教师的所有数据的程度,但后来我不知道如何继续。我的想法是,教师的jar将与示例准备好的'测试jar'在同一文件夹中(其他问题和答案存储在其变量中),当教师准备好时,他们的jar将简单地编辑'测试jar的变量和那么他们可以给学生们提供“测试罐”,虽然我不知道如何从另一个罐子里编辑一个jar文件的代码。我怎么处理这个? 提前谢谢!

3 个答案:

答案 0 :(得分:1)

基本上jar只是一个Zip文件。

Java通过

中的类型为zip存档提供了很好的支持
  

java.util.zip

包。

你的代码会是这样的:

ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream(zipFileName));

 // Add a zip entry to the output stream
 outStream.putNextEntry(new ZipEntry(myEntryName));

 // add data to your entry by writing to outStream
 ......
 ......
 //Close zip entry and file streams
 outStream.closeEntry();

一个完整的example.

答案 1 :(得分:0)

如果您尝试使用可自定义的问题和答案进行测验,我建议您使用文本文件来存储选项(问题和答案以及可能的问题类型,例如多项选择或输入valie或选择一个)。

对于文件格式可以使用xml或只使用java.util.Properties,使用其存储和加载来保存到文件。

您的属性可以是“totalNumberQuestions”,“question1”“questionType1”“question1option1”等

现在在您的主程序中,查找文件: *如果progrtam以args.length>开头0在单独的try catch中查找带有arg [0]的文件,所以即使不存在,也会显示错误消息并继续

    如果没有找到
  • ,或者在与程序相同的文件夹中没有名为“data.txt”的args: 文件f =新文件(“data.txt”); if(f.exists()){//读入inpout stream

  • 来自jar中的类加载器getClassLoader()。getResourseAsStream(查找java.lang.Class中的实际函数名称

这样一来,用户就可以使用你的第二个jar来创建他们的data.txt,然后用主要的jar包装它来询问问题,或者只是将它保存在同一个文件夹中,或者在启动程序时将其作为参数传递。 / p>

您可以使用jar命令重新打包jar

jar ufMv quiz.jar  data.txt

使用jar创建一个新的zip:

jar cvfM quiz.jar data.txt yourPackage.*.class 

答案 2 :(得分:0)

您可以更好地组成问题和答案的数据库。教师程序将在数据库中写入,孩子的程序将读取数据库。