Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #11627

Re: Resource confusion

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

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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