java.io.FileReader 将要读取的文件放在哪里?

Posted

技术标签:

【中文标题】java.io.FileReader 将要读取的文件放在哪里?【英文标题】:Where do I put files to be read by java.io.FileReader? 【发布时间】:2018-07-19 14:55:36 【问题描述】:

我正在使用 java.io.FileReader:

FileReader fileReader =  = new FileReader(filepath)

在本地运行时,典型的文件路径是 "/Users/acypher/Desktop/enrollment.json"

然后,当我在 AWS 上部署到 Tomcat 时,我想将文件放在 FileReader 可以找到的构建中的某个位置——任何地方都适合我,但我找不到任何有效的位置,因为我不知道 FileReader 使用的是什么根目录。

.war 扩展为包含 META-INF 和 WEB-INF 子文件夹的文件夹。 WEB-INF 包含一个“classes”文件夹,其中包含在我的 src/main/resources/ 文件夹中本地的文件,所以这似乎是一个不错的位置。但是我不知道如何设置文件路径来引用这个位置。

我正在使用带有 Spring Boot 的 IDEA。

【问题讨论】:

如果文件在WAR文件中你不使用FileReader,你使用Classloader.getResource()和朋友。 谢谢。我认为这意味着我正在以错误的方式解决我的问题。相反,我将只从用户的机器上进行文件上传。 【参考方案1】:

/src/main/resources/ 绝对是正确的选择。您可以使用Class.getResource(String)Class.getResourceAsStream(String) 方法访问此文件夹中的文件(请参阅:https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String))。

例如,如果您的文件位于/src/main/resources/myFolder/myFile.myExt,您可以调用:

    this.getClass().getResource("myFolder/myFile.myExt") this.getClass().getResourceAsStream("myFilder/myFile.myExt")

在没有this 引用的静态上下文中,分别变为:

    MyClass.class.getResource... MyClass.class.getResourceAsStream

在第一种情况下,您应该(我自己没有验证)能够创建一个像这样的File 实例:File file = new File(this.getClass().getResource("myFolder/myFile.myExt").toURI()),并由此创建FileReader 实例;而在第二种情况下,您可以使用 InputStream 来读取文件。

【讨论】:

以上是关于java.io.FileReader 将要读取的文件放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Java连载98-FileReader和FileWriter详解

java 按行读取txt文件的数字

java io FileReader,FileWriter

javaio流之字符输入流:java.io.Reader类及子类的子类java.io.FileReader

IO流入门-第四部分-FileReader

Java字符流