如何在Play应用中访问txt文件?

时间:2018-03-24 16:55:29

标签: playframework java-8

我正在努力访问stopwords.txt,这是我的StopWordRemover班级正在使用的停用词列表。我可以使用它的相对路径" ./stopwords.txt"来访问它。当我将StopWordRemover作为独立类运行时,但是当我尝试在Play应用程序中使用它时,我会继续获取FileNotFound Exceptions。

我也尝试过:

  • 将其移动到公用文件夹中,并使用controllers.routes.Assets.at(...)
  • 访问它
  • 将其移至conf文件夹

^两者都没有。

我哪里错了?

相关方法:

private static void initStopWordList() {
        if (stopWords == null) {
            stopWordFilePath = "/stopwords.txt";
            stopWords = new ArrayList<>();
            try {
                Stream<String> stream = Files.lines(Paths.get(stopWordFilePath));
                stream.forEach(stopWords::add);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

目录路径:

app/
    service/
        StopWordRemover
    stopwords.txt

1 个答案:

答案 0 :(得分:0)

我把它放在config文件夹中。

然后您需要将其作为资源而不是文件

在Scala中,例如:

private val stream = getClass.getResourceAsStream("/stopwords.txt")

您可以尝试其他一些版本:

getClass.getResourceAsStream("stopwords.txt")或Windows getClass.getResourceAsStream("\stopwords.txt")

从这里getting-a-resource-file-as-an-inputstream-in-playframework

class Controller @Inject()(env: Environment, ...){

  def readFile = Action {  req =>
    ...

    //if the path is bad, this will return null, so best to wrap in an Option
    val inputStream = Option(env.classLoader.getResourceAsStream("/stopwords.txt"))

    ...
  }
}