使用Maven读取文件
我正试图用MAVEN构建一个非常小的程序,从一个文件中读取数据,但我显然做了一些错误的事情,因为它给了我FileNotFoundException 我的目录结构是这样的:使用Maven读取文件,maven,package,filenotfoundexception,filereader,Maven,Package,Filenotfoundexception,Filereader,我正试图用MAVEN构建一个非常小的程序,从一个文件中读取数据,但我显然做了一些错误的事情,因为它给了我FileNotFoundException 我的目录结构是这样的: my-app src main| | |--java| | | | Main.java | |--resources|
my-app
src
main|
|
|--java|
| |
| Main.java
|
|--resources|
|
res.txt
res.txt包含一些我想从Main.java读取的字符串
...
File file = new File("res.txt");
FileReader fr= new FileReader(file);
BufferedReader br = new BufferedReader( fr);
...
我用以下方法编译它:
C:\my app mvn软件包
它在目标下创建jar。当我窥视jar内部时,我看到它在同一目录下同时包含Main.class和res.text
但是,当我尝试运行它时:
java-cp target/my-app-1.0-SNAPSHOT.jar Main
我给出了FileNotFoundException,Main.class不知何故没有看到res.txt文件。为什么?我应该把res.txt放在哪里?我还应该配置什么
任何帮助都将非常感谢。我假设.txt文件已复制到目标文件夹,并且是jar文件的一部分 在这种情况下,使用资源加载器从类路径而不是文件系统中检索它 有关如何加载文件的一些示例,请参见。您可以尝试使用
File file = new File(this.getClass().getResource("/res.txt").getFile());
甚至
File file = new File(this.getClass().getResource("/res.txt").toURI());
InputStream TokenStream=this.getClass.getResourceAsStream/files/Token.xlsx XSSFWorkbook wb=新XSSFWorkbookTokenStream XSSFSheet sheet=wb.getSheetAt0
这适用于读取excel文件当我窥视jar时,我会看到:--META INFdirectory--Main.class--res.text这太完美了。您应该能够从类路径读取文件。像这样?BufferedReader br=新建BufferedReadernew InputStreamReader this.getClass.getResourceAsStreamres.txt;遗憾的是,结果是:主线程java.lang.NoClassDefFoundError中出现异常:App引起的原因:java.lang.ClassNotFoundException:App位于java.net.URLClassLoader$1.runUnknown Source位于java.security.AccessController.doPrivilegedNative方法位于java.net.URLClassLoader.findClassUnknown Source位于sun.misc.Launcher$AppClassLoader.loadClassUnknown Source位于java.lang.ClassLoader.loadClassUnknown Source位于sun.misc.Launcher$AppClassLoader.loadClassUnknown Source位于java.lang.ClassLoadLoader.loadClassUnknown Source位于java.lang.ClassLoader.loadClassUnknown Source由于我有更多机会使用它,我发现这个问题与类路径的。如果我解包jar并从适当的位置运行该类,那么它会找到res.text,但是如果我尝试在jar外部运行它,比如:java-cp target/my-app-1.0-SNAPSHOT.jar Main,那么它找不到文本文件。所以这个问题一定是与类路径相关的,因为我有更多的机会处理它,我发现这个问题与类路径相关,而不是与maven相关。如果我解包jar并从适当的位置运行该类,那么它会找到res.text,但是如果我尝试在jar外部运行它,比如:java-cp target/my-app-1.0-SNAPSHOT.jar Main,那么它找不到文本文件。我相信问题一定是与类路径相关的