Java isn't getting the file in the source code

2019-06-26 03:37发布

Recently I have an issue with Java. I've tried some things I found on the web but they haven't worked, so I need help. I have a Java project in Eclipse. My main class is in src/programCode/UI_Main2.java. In that .java I try to access to a file in src/files/File.file

And this is when the things fo weird.

  • If I use /src/files/File.file it gives me NoSuchFileException.

  • If I use src/files/File.file it works in Eclipse but when I compile it to a executable .jar it gives me NoSuchFileException.

  • If I use /files/File.file it gives me NoSuchFileException.

  • If I use files/File.file it gives me NoSuchFileException.

  • If I use files/File.file it gives meNoSuchFileException.

  • If I use this.getClass().getResource("/files/File.file").getPath().substring(1) (without substring it gives me Invalid character) it gives me NoSuchFileException (but it shows me the absolute path and the file exists there!)

  • If I use this.getClass().getResource("files/File.file").getPath() it gives me NullPointerException and the program crashes.

  • If I use this.getClass().getResource("src/files/File.file").getPath() it gives me NullPointerException and the program crashes.

  • If I use this.getClass().getResource("/src/files/File.file").getPath() it gives me NullPointerException and the program crashes.

So, I don't know what to do. src/files/File.file is the only one that works, but it doesn't when compiled to executable jar. So please, help me, I haven't found any solution yet. Thanks!

2条回答
Fickle 薄情
2楼-- · 2019-06-26 04:07

Assuming your intent is to rum your compiled program on YOUR own development computer, you need to provide the full path to the file you want. That full path would be of the form

<Eclipse workspace location>\<project name>\<file location in project>
查看更多
干净又极端
3楼-- · 2019-06-26 04:13

Finding a file depends on two things:

  • Whether you use absolute or relative path
  • Where is your working directory

Under Unix-like system when you use path like /dir1/dir2/file you use absolute path, so your working directory doesn't matter, but you must have a file exactly under that path.

In your case you try to use relative path, so you shouldn't use / at the beginning.

This case is crucial to your problem:

"If I use src/files/File.file it works in Eclipse but when I compile it to a executable .jar it gives me NoSuchFileException." 

By default Eclipse uses as working directory a parent directory of src (which is usually a direcotry with your project", so starting from there you indeed have a file under that path.

When you start a .jar your working directory is somewhere else. Put your .jar to parent directory of src and it should work.

Now, I suggest that you change location of the file to a directory other than src (call it Resurces or something) and provide it along with the .jar.

Also, here is an interesting discussion about working directories and .jar files:

Current working directory when running a Jar

If you want to distribute a single .jar here is a good packaging instruction:

http://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/pack_resources_in_jar.html

查看更多
登录 后发表回答