Skip to content

FileNotFoundException if path or file name contains a space while iterating over a jar file #3

Description

@christianbalzer

I get a FileNotFoundException when going through a jar file if the jar file or its path contain a space:

C:\Users\foobar\test>java -jar "Class Enumeration.jar"
ClassDiscovery: Package: com.example.test.dynamic becomes Path:com/example/test/dynamic
ClassDiscovery: Resource = jar:file:/C:/Users/foobar/test/Class%20Enumeration.jar!/com/example/test/dynamic
ClassDiscovery: FullPath = jar:file:/C:/Users/foobar/test/Class%20Enumeration.jar!/com/example/test/dynamic
ClassDiscovery: Directory = null
Exception in thread "main" java.lang.RuntimeException: com.example.test.dynamic (null) does not appear to be a valid package
        at com.example.test.dynamic.ClassEnumerator.getClassesForPackage(ClassEnumerator.java:80)
        at com.example.test.dynamic.ClassEnumerator.main(ClassEnumerator.java:87)
Caused by: java.io.FileNotFoundException: C:\Users\foobar\test\Class%20Enumeration.jar (The system cannot find the file specified)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(Unknown Source)
        at java.util.zip.ZipFile.<init>(Unknown Source)
        at java.util.jar.JarFile.<init>(Unknown Source)
        at java.util.jar.JarFile.<init>(Unknown Source)
        at com.example.test.dynamic.ClassEnumerator.getClassesForPackage(ClassEnumerator.java:62)
        ... 1 more

The ClassEnumerator class contains the following main method as well as the methods posted on StackOverflow:

    public static void main(String... args0) {
        getClassesForPackage(Package.getPackage("com.example.test.dynamic"));
    }

I'm running on Win 7, 64bit. Here is my Java version:

java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) Client VM (build 25.20-b23, mixed mode, sharing)

I have the following directory setup

src
+---main
|   +---java
|   |   +---com
|   |   |   \---example
|   |   |       \---test
|   |   |           \---dynamic
|   |   |               |   ClassEnumerator.java
|   |   |               |
|   |   |               \---classes
|   |   |                   |   MainDirTestClass.java
|   |   |                   |
|   |   |                   \---subpackage
|   |   |                           SubPackageTestClass.java
|   |   \---META-INF
|   |           MANIFEST.MF
|   \---resources
\---test
    \---java

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions