patternjavaMinor
Which class is best to call .getResource on?
Viewed 0 times
getresourcecallwhichclassbest
Problem
I'm creating a Java Helper Library with helpful static methods. I find myself needing to call
I have a few alternatives I'm thinking of. Below is an example of when I need to use this and the alternatives I have thought of:
Alternative 1 (what I would prefer for the sake of users):
Alternative 2:
Alternative 3 (should I just have the user give me the resource?):
...getResource(...) or ...getResourceAsStream(...) in several instances and I'm wondering what's the best practice for this. It seems to be working fine when I say: Helper.class.getResource(...), but I'm wondering whether that will bite me in the future.I have a few alternatives I'm thinking of. Below is an example of when I need to use this and the alternatives I have thought of:
Alternative 1 (what I would prefer for the sake of users):
/**
* Takes the given resource and returns that as a string.
*
* @param location of the file
* @return the file as a string
* @throws IOException
*/
public static String resourceToString(String location) throws IOException {
InputStream is = IOHelper.class.getResourceAsStream(location);
InputStreamReader r = new InputStreamReader(is);
return readerToString(r);
}Alternative 2:
/**
* Takes the given resource (based on the given class) and returns that as a string.
*
* @param location of the file
* @param c class to get the resource from
* @return the file as a string
* @throws IOException
*/
public static String resourceToString(String location, Class c) throws IOException {
InputStream is = c.getResourceAsStream(location);
InputStreamReader r = new InputStreamReader(is);
return readerToString(r);
}Alternative 3 (should I just have the user give me the resource?):
/**
* Takes the given InputStream and returns that as a string.
*
* @param is the InputStream of the File to read
* @return the file as a string
* @throws IOException
*/
public static String resourceToString(InputStream is) throws IOException {
InputStreamReader r = new InputStreamReader(is);
return readerToString(r);
}Solution
I would prefer the second one. The others will bite if the library runs inside an OSGi container.
Furthermore, I would
Furthermore, I would
- pass
UTF-8character encoding to the constructor of theInputStreamReader. Otherwise it will use the system encoding which vary from system to system. (Or let the user to set it with a third method parameter.)
- use longer variable names.
is,r,care not too easy to read. I would call themresourceStream,clazzandresourceReader. It does not force readers to decode them.
- reverse the order of
String location, Class cparameters. It would be in the same order as the first line use them (c.getResourceAsStream(location)). I don't know if there is a rule of thumb for this, but it looks more natural to me. (Any pointers are welcome.)
- remove the
* @throws IOExceptionjavadoc line. It is meaningless in this form.
Context
StackExchange Code Review Q#11290, answer score: 3
Revisions (0)
No revisions yet.