Regarding the classloader: The read and save methods, respectively, reside in two different classes. The read method is static and called like ReadClass.GetProperties (i.e. without an object). The save method is part of a servlet class and is not static. May this cause problems?
I know practically nothing about classloaders et al, and I do not tamper with them anywhere else in the web app. Jan Andersson Senior Software Engineering Specialist IBM Rational Brand Services +46 (0)70-793 23 02 Oddegatan 5 164 92 Stockholm ALEX HYDE <[EMAIL PROTECTED]> 2005-11-14 16:46 To Jan Andersson/Sweden/[EMAIL PROTECTED] cc Subject Re: How to read and save a simple file?!? Hi Jan, This is one of things that's given me a headache in the past. Take what I say with a pinch of salt as I'm no expert. I would guess that (if your file is not at the root of the class path) you might need to specify a full path to the file relative to the root of the classpath. I'm afraid this is just a guess. For example if your properties file was located: mydir/ReqProFPHubNotifier.properties then you might need to try referencing it like: cl.getResource("mydir/ReqProFPHubNotifier.properties") or (absolutely) cl.getResource("/mydir/ReqProFPHubNotifier.properties") I'm afraid I'm guessing. I think I fudged this once just through trial and error. Good luck ps: you are referencing the class loader via different classes in each case so I'm not sure if this might have an effect. --- Jan Andersson <[EMAIL PROTECTED]> wrote: > Hi all! > > This is a simple question, which should have a > simple answer. > > I have a servlet in my webapp that reads a file with > properties and > displays them. You can change the properties and > then hit "Save", which > makes the servlet write the properties to a file. > The problem I'm > experincing is that when saving the properties, the > file is not found. > > The code for writing goes like this. > > ClassLoader cl = > ReqProPropConfig.class.getClassLoader(); > URL propsURL = > cl.getResource("ReqProFPHubNotifier.properties"); > FileOutputStream out = new > FileOutputStream(propsURL.getPath()); > PrintStream printOut = new > PrintStream(out); > > and then a series of printOut.println writes the > properties, one at a > time, to the file. > > And the code for reading: > ClassLoader cl = > ReqProInitializer.class.getClassLoader(); > Properties properties = new > Properties(); > String path = > cl.getResource("ReqProFPHubNotifier.properties").getPath(); > String decodedPath = > URLDecoder.decode(path); > InputStream in2 = new > FileInputStream(decodedPath); > properties.load(in2); > in2.close(); > return properties; > > I use the classloader to be able to find the file > without having to point > out exactly where it is. (As I've been told, the > classloader uses the > classpath to find the file.) The code as it stands > today (e.g. the use of > URLDecoder) is mainly a result of trial-and-error. > That is, it used to > work but not anymore (which probably is due to > testing in the real > production environment, which isn't exactly what I > used when I tested it.) > > If there's another way to read and write a file with > properties > (relocationability of the property file preserved, > relative path ok) I'm > VERY interested to hear. > > As you understand, I'm pretty new to both to Java > and Tomcat, although I > have some ten years experience of professional > programming. So this > questions in its simplicity is really annoying me. > One doesn't think of > reading and saving a simple text file as something > that should be > complicated. > > Please help! > > Jan Andersson > Senior Software Engineering Specialist > IBM Rational Brand Services > +46 (0)70-793 23 02 > Oddegatan 5 > 164 92 Stockholm > ___________________________________________________________ Yahoo! Model Search 2005 - Find the next catwalk superstars - http://uk.news.yahoo.com/hot/model-search/