使用Maven读取文件

使用Maven读取文件,maven,package,filenotfoundexception,filereader,Maven,Package,Filenotfoundexception,Filereader,我正试图用MAVEN构建一个非常小的程序,从一个文件中读取数据,但我显然做了一些错误的事情,因为它给了我FileNotFoundException 我的目录结构是这样的: my-app src main| | |--java| | | | Main.java | |--resources|

我正试图用MAVEN构建一个非常小的程序,从一个文件中读取数据,但我显然做了一些错误的事情,因为它给了我FileNotFoundException

我的目录结构是这样的:

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,那么它找不到文本文件。我相信问题一定是与类路径相关的