【问题标题】:Open a file with java and maven用java和maven打开一个文件
【发布时间】:2015-05-05 06:18:14
【问题描述】:

我不知道如何在使用 maven 时正确地从 java 访问文件。我知道还有很多其他问题/答案与此非常相似,但我无法让其中任何一个为我工作。

现在我在这个目录中有我希望用来打开数据文件的代码文件:

maven_project/src/main/java/project/package/source_file.java

在 pom.xml 中我包含如下资源:

<build>
  <resources>
    <resource>
      <directory>src/main/resources/question_contents</directory>
        <includes>
          <include>*.json</include>
        </includes>
     </resource>
  </resources>
</build>

资源文件被正确复制到

 maven_project/target/classes

我现在用来构建的命令是

 mvn package

如果重要的话,我正在使用 linux

我愿意更改此设置的任何方面以打开文件。

我更愿意以FileInputStream 的形式打开它们,但我可以处理任何事情。

任何帮助将不胜感激。

更新

我尝试了建议的重复问题中的答案,但仍然没有运气。我之前没有想到的是,这是在抽象类的方法中完成的,不知道这会对this 的引用产生什么影响。

我也知道这在某一时刻有效。在将所有内容移至 maven 之前,我将所有内容都集中在一个文件夹中,没有任何问题。

【问题讨论】:

标签: java maven


【解决方案1】:

由于您将 Maven 设置为在构建中正确包含资源文件,因此您可以使用类加载器访问它们

InputStream in = 
  SomeClassInTheSamePackage.class.getResourceAsStream("filename.json");

// or using full path starting from slash

in = SomeClassAnywhereInYourProject.class.getResourceAsStream(
    "/question_contents/filename.json");

【讨论】:

  • 两者都不适合我。我仍然只是收到错误,文件名不存在
【解决方案2】:

getClassLoader() 将帮助您获取文件。将文件包含在maven项目中的resources文件夹中,并使用以下方式读取文件。

BufferedReader br = new BufferedReader(new InputStreamReader(MyClass.class.getClassLoader().getResourceAsStream(fileName), "UTF8"));

fileName 替换为您的实际文件名。现在,您可以使用br 逐行读取文件。

【讨论】:

  • Errors, filename.json does not exist 这就是我所看到的。其他一切正常。
  • 你能检查一下你是否把filename.json放在了资源文件夹里吗?另外,请通过编辑问题以展开模式分享您的项目文件夹结构
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 2013-01-07
  • 2023-03-13
  • 2011-12-24
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多