Let's start with a filename which is stored in a String variable e.g.
String fn = "D:\project\java\testproj\log2011.log"
Aside: Those backslash characters need some attention ...
I want to append "test" to the file basename but keep path and extension.
The resulting filename for the example above should be:
string fn2 = "D:\project\java\testproj\log2011test.log"
How can I do this programmatically from Java?
A bare-bones approach:
int dot = fn.lastIndexOf('.');
String fn2 = fn.substring(0, dot) + "test" + fn.substring(dot);
In actual use you'd want some sanity checking to be sure the '.'
is in fact present and is after the last '\', so you wouldn't
get fooled by
D:\project\java\testproj\config
or
D:\project\java\testproj.old\data
You could guard against such things by using fn.lastIndexOf('\\')
to locate the rightmost back-slash and checking that the '.' does
in fact appear even further right. However, I think you're better
off using the File class to chop up and reassemble file names in a
(mostly) platform-independent way, e.g.
File base = new File(fn);
String name = base.getName(); // handles / or \ or whatever
int dot = name.lastIndexOf('.');
String newname = (dot < 0) ? name + "test"
: name.substring(0, dot) + "test" + name.substring(dot);
File test = new File(base.getParentFile(), newname);
String fn2 = test.getPath(); // if needed
This may seem like a lot of running around for little effect, but
it protects you from some unpleasant surprises in the long run.