I had a problem with renaming a properties file. Java’s
File.renameTo() always failed and returned false. There was no explanation as to why it failed, so it left me stuck with no idea what to do.
Windows has a different file locking policy to Unix (and everyone else). Under Windows, if a process has a file open no other process can rename, move or delete the file until that process has closed all handles to it. As if that wasn’t bad enough, if you do leave a file open and your code finishes running the file will still be locked after an unknown amount of time. It could be 30 seconds or it could be never. Hurray for windows
So you must ensure that the file you are trying to rename is completely closed. My problem turned out to be in the loading and saving of properties files. Almost all the example code you download relating to reading and writing properties is wrong.
Properties.store() both take file streams. If the stream is still open then the file will be locked.
Most of the examples tell you to load the properties like this:
and save them like this:
I was under the impression that
load closed down the stream after they had done their business, but this is not the case. The streams are left open. So when you use the methods above to create a file and read from a file you are leaving the handle open. What’s worse is that because the
FileOutputStream are in-line there is no reference available to close the streams down - and you are stuffed!
The correct method of reading from a
Properties file is:
and similarly, writing to a
Now, after reading and writing, you have explicitly closed the file and you are free to rename the file without error.
Searching on Google can be really easy as long as you pick the right words to search for. What if you’re not sure what you are looking for or what if you don’t know what the thing (or action) is called?
I was using Eclipse (the Java language editor) in its vanilla form and when I switched to Spring Tool Suite (STS) (which is a re-badged version of Eclipse) I found that the feature I thought was so useful had been switched off.
I knew the feature I wanted to switch on but I didn’t know what it was called! So I’m writing this article so that others might find it and not have to spend 2 weeks looking for it.
When the Eclipse feature is switched on, selecting a file to edit will open the representation of the file in the Package Explorer pane. As you open more files and switch to them in the editor pane, the focus moves in-line inside the Package Explorer.
This is called Linking or Link with Editor. You are linking the Package Explorer with the Editor pane. There is a double arrow icon at the top of the Package Explorer that toggles this behaviour:
Wonderful though Clearcase is, its support tools leave a lot to be desired. Take the file comparison application that comes bundled. It only flags lines which have changed, so you often have to spend a couple of moments scanning the line to spot the changes. There are loads of file comparers out there to choose from. So here is how to integrate it with Clearcase.
- Download KDiff3 and install.
- Run it up.
- From the menu select Settings->Configure KDiff3.
- Go into the Operation tab.
- Click Integrate with Clearcase.
- Click Ok.
Simple, but what if your file comparison tool doesn’t have an integrate with Clearcase button? Changing the Clearcase hooks is quite straight forward. The mapping file exists in:
The file is keyed in extension (or class) and action, so replace the following lines in the
_rftdef xcompare C:\Program Files\KDiff3\kdiff3.exe _rftmap xcompare C:\Program Files\KDiff3\kdiff3.exe _rftvp xcompare C:\Program Files\KDiff3\kdiff3.exe _xml xcompare C:\Program Files\KDiff3\kdiff3.exe _xml xmerge C:\Program Files\KDiff3\kdiff3.exe _xml2 xcompare C:\Program Files\KDiff3\kdiff3.exe _xml2 xmerge C:\Program Files\KDiff3\kdiff3.exe _xtools xcompare C:\Program Files\KDiff3\kdiff3.exe text_file_delta xcompare C:\Program Files\KDiff3\kdiff3.exe text_file_delta xmerge C:\Program Files\KDiff3\kdiff3.exe whole_copy xcompare C:\Program Files\KDiff3\kdiff3.exe whole_copy xmerge C:\Program Files\KDiff3\kdiff3.exe z_text_file_delta xcompare C:\Program Files\KDiff3\kdiff3.exe z_text_file_delta xmerge C:\Program Files\KDiff3\kdiff3.exe z_whole_copy xcompare C:\Program Files\KDiff3\kdiff3.exe z_whole_copy xmerge C:\Program Files\KDiff3\kdiff3.exe
The clearcase reports that come out of the box only let you find out the files that have changed between 2 labels. What if you haven’t applied the other label yet, or you are writing release notes and the official labelling hasn’t taken place yet?
If you have applied a label, how do you know which files have changed since then.
Open a command line and switch to the view and directory path you are interested in. Issue the following command:
cleartool find . -cview -version “!lbtype(MY_LABEL)” -print
‘.’ is from the current directory,
-cview is current view
-version “!lbtype(MY_LABEL)” is look for versions without a label called MY_LABEL
-print is what to do with them.
Seems like an honest question, however the Project Voldemort website doesn’t actually tell you. Their page describes what features it has but doesn’t explicity say what it is. The Project Voldemort web site doesn’t have any email address of any of the members to ask questions, it only has an mailing list to which you can post questions.
After a bit of hunting, in fact far more hunting that I would have expected I came across this article which explains what Voldemort actually is. It even mentions why the project is called Project Voldemort.
Prehaps they should read my article on clearly defining what a project does. “The whats and whys to creating project descriptions“.