Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #11627
| From | Arved Sandstrom <asandstrom3minus1@eastlink.ca> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Resource confusion |
| References | <Xns9FE8824D28F28jpnasty@94.75.214.39> |
| Message-ID | <UeYUq.127$V94.98@newsfe21.iad> (permalink) |
| Organization | Public Usenet Newsgroup Access |
| Date | 2012-01-28 15:44 -0400 |
On 12-01-28 01:47 PM, Novice wrote:
[ SNIP ]
> String phraseListStartPoint = this.userPrefs.get
> (PHRASE_LIST_STARTPOINT_KEY, PHRASE_LIST_STARTPOINT_VALUE);
> URL phraseListURL = this.getClass().getResource(phraseListStartPoint);
[ ... ]
>
> File startPoint = null;
> if (decodedFileName != null) startPoint = new File(decodedFileName);
> else startPoint = new File(System.getProperty("user.home"));
>
> /* Launch the file chooser, open the file, read it..... */
> =========================================================================
>
>
> This code inevitably reveals that phraseListURL is null, even though the
> value of PHRASE_LIST_STARTPOINT_VALUE is a path found on my file system
> such as C:\Games\PhraseLists.
>
> Clearly, this.getClass().getResource(phraseListStartPoint) is failing to
> work as I would like.
>
> I've tried reading the API on the getResource() method of the Class class
> but I'm not following it. I know nothing about class loaders or which one
> is the right one to use when. I'm not even sure I should be using an
> approach like this to access a file that is in the file system.
[ SNIP ]
If you're going to use .getResource(), the String "name" that you supply
is actually a '/'-separated path name that identifies something on a
classloader classpath. You have a number of classloaders involved every
time you run your app; fact is that your phrase-list file (even if you
had a '/'-separated path spec for it) very likely isn't on the classpath
for any of those classloaders.
It doesn't sound to me like you need either the getResource() or
getResourceAsStream() approaches (which are available through
ClassLoader or delegated from Class); you might be better off saving and
using file URLs.
The exact form of a file URL varies across systems but they all have the
file: scheme. On a UNIX system
URL phraseListUrl = new URL("file:///home/me/Games/PhraseLists");
would work, but off the top of my head on a Windows box it's something like
URL phraseListUrl = new URL("file:///C:/Games/PhraseLists");
This is just informational, because your app doesn't have to construct
these things, just save them. Your user does the heavy lifting by
selecting the location with a file chooser; that gives you a File
object. You can save out the result with
userSelectedFile.toURI().toURL().toString()
To return to getResource() or getResourceAsStream(), and classloaders:
the situation is more complicated in Java application server
environments [1], and for this reason context classloaders were made
available as (imperfect) solutions. But you are not in that scenario.
I'll also add that *if* it made sense for you to have a file resource on
the classpath, and you were using getResource() or
getResourceAsStream(), it doesn't make sense for you to pose the
question "which classloader should I use?" That's not *your* decision to
make, per se - you can influence that choice by where you place the
resource, but you don't directly select a classloader (again, unless you
were in a server environment and using a context classloader).
AHS
1. As anyone can attest who has spent quality hours wrestling with a
situation where instance 1 of class X hasn't the same class as instance
2 of class X...for various reasons.
--
...wherever the people are well informed they can be trusted with their
own government...
-- Thomas Jefferson, 1789
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Resource confusion Novice <novice@example..com> - 2012-01-28 17:47 +0000
Re: Resource confusion Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-28 15:44 -0400
Re: Resource confusion Lew <noone@lewscanon.com> - 2012-01-28 13:43 -0800
Re: Resource confusion Novice <novice@example..com> - 2012-01-29 05:40 +0000
Re: Resource confusion Lew <noone@lewscanon.com> - 2012-01-28 22:43 -0800
Re: Resource confusion Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-29 13:24 -0400
Re: Resource confusion Roedy Green <see_website@mindprod.com.invalid> - 2012-01-30 13:33 -0800
Re: Resource confusion Martin Gregorie <martin@address-in-sig.invalid> - 2012-01-31 02:45 +0000
Re: Resource confusion Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-31 06:32 -0400
Re: Resource confusion Martin Gregorie <martin@address-in-sig.invalid> - 2012-01-31 20:43 +0000
Re: Resource confusion Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-01-31 18:08 -0400
Re: Resource confusion Martin Gregorie <martin@address-in-sig.invalid> - 2012-01-31 23:01 +0000
csiph-web