FileReader抛出异常,因为文件路径有错误的语法?

时间:2018-05-09 08:35:12

标签: java filereader filenotfoundexception

我将要读取的文件放入我的资源文件夹

src
|_main
   |_resources
     |_graphqls
       |_test.graphqls

以下代码段读取文件

final String pathToSchemaFile = this.getClass().getClassLoader().getResource("graphqls/test.graphqls").getFile();
final File = new File(pathToSchemaFile);

这是我在评估前面代码段中File返回的.getFile()对象时得到的结果。

file:\C:\maven_repository\com\...\app.jar!\graphqls\test.graphqls

enter image description here

运行以下代码new FileReader(file)时会抛出此异常

Method threw 'java.io.FileNotFoundException' exception.
file:\C:\maven_repository\com\...\app.jar!\graphqls\test.graphqls (The filename, directory name, or volume label syntax is incorrect)
java.io.FileNotFoundException: file:\C:\maven_repository\com\...\app.jar.jar!\graphqls\test.graphqls (The filename, directory name, or volume label syntax is incorrect)

2 个答案:

答案 0 :(得分:2)

您正在访问实际位于JAR文件(如ZIP)中的文件。

如果你的jar在类路径上:

Schema::create('users', function (Blueprint $table) {
  // ..
  $this->timestamp('user_creation_date', 0)->nullable();
  $this->timestamp('user_update_date', 0)->nullable();
});

如果它不在类路径上,那么您可以通过以下方式访问它:

InputStream is = YourClass.class.getResourceAsStream("1.txt");

答案 1 :(得分:0)

您可以通过创建InputStreamReader来避免该文件。

InputStreamReader reader = new InputStreamReader(
    this.getClass().getResourceAsStream("/graphqls/test.graphqls"), 
    StandardCharsets.UTF_8
);

建议使用YourClassName.class.getResourceAsStream(),除非您有特殊原因要使用.getClass&& .getClassLoader。