|
This is not for debugging reasons, it's for 'giving you a chance of not being flayed alive by anyone who knows how to write good code' reasons.
You should NEVER use a blind catch. Ever. End of story.
In the general case of I/O, you should catch each exception because if anything happens, you should close all open streams before exiting the method.
In the specific case of your code, if you know where the bug us WHY NOT TELL US?
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
FileOutputStream fos = new FileOutputStream(entry.getName(), true);
|
|
|
|
|
That's better. If you read the docs[^]:
JavaDoc wrote: throws FileNotFoundException - if the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason
So the file's not there or not writeable.
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
Not there? But the file is in the jar, so how can it not be there?
|
|
|
|
|
The output file is not there.
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
Do you know how i fix that?
|
|
|
|
|
Before opening the output stream check if it exists, if not then don't use append = true
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
Still gives me the same error. Here is the new code:
BufferedOutputStream dest = null;<br />
FileInputStream fis = new <br />
FileInputStream(fName);<br />
JarInputStream zis = new <br />
JarInputStream(new BufferedInputStream(fis));<br />
ZipEntry entry;<br />
while((entry = zis.getNextEntry()) != null) {<br />
int count;<br />
byte data[] = new byte[BUFFER];<br />
File theFile = new File(Util.getWorkingDirectory().getAbsoluteFile() + "/bin/temp/" + entry.getName());<br />
FileOutputStream fos = null;<br />
if(theFile.exists())<br />
{<br />
fos = new FileOutputStream(Util.getWorkingDirectory().getAbsoluteFile() + "/bin/temp/" + entry.getName(), true);<br />
}<br />
else<br />
{<br />
fos = new FileOutputStream(Util.getWorkingDirectory().getAbsoluteFile() + "/bin/temp/" + entry.getName());<br />
}<br />
<br />
dest = new <br />
BufferedOutputStream(fos, BUFFER);<br />
while ((count = zis.read(data, 0, BUFFER)) <br />
!= -1) {<br />
dest.write(data, 0, count);<br />
}<br />
dest.flush();<br />
dest.close();<br />
}<br />
zis.close();
|
|
|
|
|
Can you please use <pre> tags for multiline code; there is an edit button for your message.
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
The lines:
if(theFile.exists())
{
fos = new FileOutputStream(Util.getWorkingDirectory().getAbsoluteFile() + "/bin/temp/" + entry.getName(), true);
}
else
{
fos = new FileOutputStream(Util.getWorkingDirectory().getAbsoluteFile() + "/bin/temp/" + entry.getName());
}
Can be written:
fos = new FileOutputStream(
Util.getWorkingDirectory().getAbsoluteFile() + "/bin/temp/" + entry.getName(),
theFile.exists());
That's readable.
Now, check if the file exists, if it doesn't [which I suspect], is the directory name valid? Is the file name valid? Do you have access to write to the location? This is called debugging and the programmer is expected to do this. The more information you can provide, the easier it is for us to help. Right now, I can offer little more than general tips; even if they are bloody good ones.
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
I added a specific folder to add the contents to. Now i get a FileNotFoundException (No suck File or directory):
java.io.FileNotFoundException: /home/petterroea/.minecraft/bin/temp/META-INF/MOJANG_C.SF (No such file or directory)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:209)
at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
...
The line that is not working, is
fos = new FileOutputStream(
Util.getWorkingDirectory().getAbsoluteFile() + "/bin/temp/" + entry.getName(),
theFile.exists());
The folder /home/petterroea/.minecraft/bin/temp/ exists, but there is no content in it
|
|
|
|
|
The exception is even telling you what's wrong:
Member 7991625 wrote: java.io.FileNotFoundException: /home/petterroea/.minecraft/bin/temp/META-INF/MOJANG_C.SF (No such file or directory)
File /home/petterroea/.minecraft/bin/temp/META-INF/MOJANG_C.SF is the problem, you need to create the folder /home/petterroea/.minecraft/bin/temp/META-INF before you can add anything to it...
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
How do i do that dynamically with multiple folders? I am thinking of something like removing /home/petterroea/.minecraft/bin/temp/
And splitting the rest by /
Then loop through the parent's contents to see if the folder exists...
|
|
|
|
|
You should be able to use theFile.mkdirs() .
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
I got the (Is a directory) error. How do i remove the file's name and only use the paths?
|
|
|
|
|
Try theFile.getAbsoluteFile().mkdirs()
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
I have compiled a java file but it does not have debug level information as LineNumberTable and LocalVariableTable , because of which my log file is not getting generated.
I want to know how can we have the debug information in the class file?
Any help !!
|
|
|
|
|
You need to tell your compiler to generate the debug information. Exactly how to do this depends on what development environment you are using. Here's how to do it in Eclipse (and it's probably pretty similar in other IDEs):
Project > Properties > Java Compiler > Classfile Generation
There are a number of checkboxes, including three you want. Check them and rebuild. Easy.
If you're using a standalone compiler, it will have command line switches. Run it with -? to see what they are.
Cheers,
Peter
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
Thanks for your reply Peter.
But the problem is not at IDE Level, I am tring to run a ANT script which is running on jdk 1.6 and generates a JAR file, when I see the class file it does not contain the debug level information(I am not running the ANT file from IDE , I have a Dmake file which calls the ANT script).
As per my understanding when the compiler compiles a java file, it puts the debug information in the class file, but they are missing in the class file.
Can it be because of some JVM or compiler setting??
|
|
|
|
|
Indrojeet wrote: Can it be because of some JVM or compiler setting??
Yes - a compiler setting, as I indicated in my previous reply. This is a cut'n'paste from javac.html - the docco for the javac compiler, which is probably what you are using.
-g
Generate all debugging information, including local variables. By default, only line number and source file information is generated.
-g:none
Do not generate any debugging information.
-g:{keyword list}
Generate only some kinds of debugging information, specified by a comma separated list of keywords. Valid keywords are:
source
Source file debugging information
lines
Line number debugging information
vars
Local variable debugging information
Looks like you have -g:none in an ANT buildfile or somewhere. Go find it and fix!
Cheers,
Peter
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
the current javac looks like this
<javac srcdir="${src}" destdir="${dest}">
<classpath refid="classpath" />
</javac>
Can you tell me how to include this -g in this ant script?
|
|
|
|
|
Sorry, I can't help you with this one, as I don't know my way around ANT. With any luck, someone who does know will see this thread and pick up from here. Maybe ask in another forum.
Good luck!
Peter
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
Hey Peter , i got the fix
added a attribute, debug="on"
Thanks
|
|
|
|
|
Hi
I wondered how i could:
1. Check if a file in a .jar file exists
2. Delete files from a .jar
3. add files to a .jar
4. Delete folders from a .jar
I can't find any documentation on this by searching!
|
|
|
|
|
You can't have looked very hard. Googling "jar file format" gave me almost 4.5 million results, the first one of which is this Wikipedia entry[^].
As it says, a jar file is basically a zip file with some descriptive stuff in a file called META-INF\MANIFEST.MF. So, grab your favourite zip tool and text editor and go for it.
Peter
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|