Solved

Adding file to jar.zip

Posted on 2004-08-25
19
232 Views
Last Modified: 2012-08-13
What is the simplest way to add an image file to a jar.zip archive?

I don't have (and don't want) a Java SDK.  My XML file looks for an image within the jar file.  I just want to add a new image and point the XML to it.
0
Comment
Question by:mesmay
  • 7
  • 5
  • 4
  • +2
19 Comments
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
0
 
LVL 92

Assisted Solution

by:objects
objects earned 20 total points
Comment Utility
use winzip
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
or whatever your favourite zip utility is.
0
 
LVL 12

Expert Comment

by:Giant2
Comment Utility
>What is the simplest way to add an image file to a jar.zip archive?
>I don't have (and don't want) a Java SDK.

You must have some application managing the archive. You must search over the documentation of this application.
(Winzip, Winrar,...Compress,...)

Bye, Giant.
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
Do you mean just a jar archive?

Or a zip file?

To add to a zip file, I think you need to expand the entire zip to a temp directory, add you file to that directory, then zip it all up again...  You cannot just add files to zip files :-(

http://www.developer.com/java/other/article.php/607931

From the "Updating" section

---------------

 Updating an existing zip file or jar file gets tricky, because the zip and jar classes do not provide truly random access to zip files and jar files. The ZipFile and JarFile classes have a method for getting a specific entry but not for adding an entry. The ZipInputStream and JarInputStream classes have a method for adding an entry but not for getting a specific entry. So, updating a zip file or a jar file will often require the use of a temporary file.

Here is an example program, JarUpdate (http://www.developer.com/repository/common/content/article/19990118/gm_trose_jarzip2/JarUpdate.java), that updates a specific entry in an existing jar file.

The algorithm for JarUpdate is:

   1. Get the jar name and the file name from the command-line arguments.
   2. Create file objects for the jar file and a temporary jar file.
   3. Open the jar file.
   4. Create the temporary jar file, with no manifest. (The manifest will be copied from the original jar file.)
   5. Allocate a buffer for reading file data.
   6. Open the specified file.
   7. Create an entry in the temporary jar for the specified file.
   8. Read the file data and write it to the temporary jar.
   9. Loop through the entries of the original jar file, skipping the entry that was added to the temporary jar. For each entry:
         1. Get an input stream for the entry.
         2. Read the entry data and write it to the temporary jar.
  10. Close the temporary jar file.
  11. Close the original jar file.
  12. If the temporary jar file was created without an exception, delete the original jar file and change the name the temporary file to the name of original jar file. Otherwise, delete the temporary jar file.

To update an existing zip file, you would use the algorithm above but would use the zip classes instead of the jar classes. This is left as an exercise for the reader.
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
If you mean non-programmatically, you can use any zip program - you don't need the SDK.
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
>  If you mean non-programmatically, you can use any zip program - you don't need the SDK.

Though you'd have to wonder what this question is doing in the java TA ;-)
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
> you can use any zip program

already mentioned (twice)
0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 

Author Comment

by:mesmay
Comment Utility
Okay,
I'ved done it the simple way suggested, using winzip.  But the file is not recognised.

In the XML file I have:
      <object name="distance_add" type="imagebutton" bounds="627,2,23,23"
                                      image="img/tool_getinfo.gif" group="1"/>
      <object name="distance_clear" type="imagebutton" bounds="652,2,23,23"
                                      image="img/cross_diag.gif"/>

This works fine.
BUT if I add another gif file to the img folder in the zip file using winzip and changing the XML to point to it, it does not see it.
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 30 total points
Comment Utility
Is it in the correct sub-entry?
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
I'm confused....  what has this got to do with java in any way shape or form?

Maybe I haven't had enough coffee...
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
>>already mentioned (twice)

If you are referring to your comment 'use winzip' then that's not equivalent to mine imo
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
are u sure its in the right directory
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
>>are u sure its in the right directory

(Already mentioned)
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
:-)

LOL
0
 

Author Comment

by:mesmay
Comment Utility
TimYates,
I'm new to Java and when simply adding a file to the jar archive didn't work I assumed it may be more complicated, therefore I posted here.

Where would you suggest I have posted?

Anyway, problem solved - I just put the image file in the root instead of in the img folder.
Thanks for cofirming that it is indeed simple.
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
Glad we could help :)
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
Didn't mean to be nasty ;-)

Good luck with it :-)  Glad you got it sorted :-)

Tim
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
strDist challenge 35 84
word0 challenge 4 52
firstChar challenge 13 82
Requested array size exceeds VM limit 3 44
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now