Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!.POSTED!not-for-mail From: Steven Simpson Newsgroups: comp.lang.java.programmer Subject: Re: get path of a Jar file Date: Mon, 24 Oct 2011 21:07:18 +0100 Organization: Aioe.org NNTP Server Lines: 40 Message-ID: References: NNTP-Posting-Host: 3JnaVNumoybW/sOwRjlcjw.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110922 Lightning/1.0b2 Thunderbird/3.1.15 X-Notice: Filtered by postfilter v. 0.8.2 Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:9151 On 22/10/11 10:54, Philipp Kraus wrote: > String l_jarfile = > Class.forName("class_within_the_jar").getResource("").toString(); > l_jarfile = l_jarfile.substring(9, > l_jarfile.lastIndexOf(".jar!")) + ".jar"; > > This does not work on MS Windows systems (unix and OSX work correct > with this code). > If the Jar files is stored under a path like "C:\Users\myuser\Java > Files\myjar.jar" (with a space) > the JarFile-Object can't locate the file, because the space within the > directory is changed to %20 Leaving aside the good questions of why, and whether these magic constants are a good thing, I will address the decoding of % sequences: Create a java.net.URI from the string, then create a java.io.File from the URI. import java.net.*; import java.io.*; public class GetPath { public static void main(String[] args) throws Exception { Class clazz = Class.forName(args[0]); URL clazzRes = clazz.getResource(""); String loc = clazzRes.toString(); System.out.println("Resource: " + loc); URI stripped = URI.create(loc.substring(4, loc.lastIndexOf(".jar!") + 4)); System.out.println("Stripped: " + stripped); File result = new File(stripped); System.out.println("Result: " + result); } } Lots of result checking omitted. -- ss at comp dot lancs dot ac dot uk