如何在 java maven 项目的基础级别读取文本文件
How to read text file on base level of java maven project
我想将文件读入位于我的 Maven 项目基础级别的字符串变量。
在这个例子中,我试图读取 "somerando.sql" 文件。
我一直在尝试使用:
Path path = Paths.get("/myproj/somerando.sql");
String sql = new String(Files.readAllBytes(path));
但这并没有得到它。有什么方法可以让我从这里读取文件,而无需使用它在计算机上的绝对路径?
您确定没有将 eclipse 的项目路径与 OS 路径混在一起吗?
使用:
Path path = Paths.get("somerando.sql");
String sql = new String(Files.readAllBytes(path));
没有前面的斜线。请记住,除非它以斜杠开头,否则 Path API 将根据 JVM 的工作目录解析您的路径。
它不知道 Eclipse 解析文件的方式,其中根 (/) 可能被假定为相对于其工作空间。
附带说明一下,在创建未指定编码的字符串时请小心。
Maven 有一些约定,你应该尽量遵守它们。这些很有帮助。
此外,在开发之后,应用程序并不存在于 Maven 项目中,而是存在于组件中(Jar/war,等等...)。
因此,为避免绝对路径,您应该将应用程序或测试所需的文件放在匹配的类路径文件夹中。
如果您的文件用于测试,您可以将其移动到 Maven 保留的位置以满足此需求:yourMavenProject/src/test/resources
如果您的文件是为应用程序准备的,您可以将其移动到 Maven 保留的位置以满足此需求:yourMavenProject/src/main/resources
现在您可以通过以下方式访问它:
Path path = Paths.get(YourClass.class.getResource("filter.xml").toURI());
我想将文件读入位于我的 Maven 项目基础级别的字符串变量。
在这个例子中,我试图读取 "somerando.sql" 文件。
我一直在尝试使用:
Path path = Paths.get("/myproj/somerando.sql");
String sql = new String(Files.readAllBytes(path));
但这并没有得到它。有什么方法可以让我从这里读取文件,而无需使用它在计算机上的绝对路径?
您确定没有将 eclipse 的项目路径与 OS 路径混在一起吗?
使用:
Path path = Paths.get("somerando.sql");
String sql = new String(Files.readAllBytes(path));
没有前面的斜线。请记住,除非它以斜杠开头,否则 Path API 将根据 JVM 的工作目录解析您的路径。
它不知道 Eclipse 解析文件的方式,其中根 (/) 可能被假定为相对于其工作空间。
附带说明一下,在创建未指定编码的字符串时请小心。
Maven 有一些约定,你应该尽量遵守它们。这些很有帮助。
此外,在开发之后,应用程序并不存在于 Maven 项目中,而是存在于组件中(Jar/war,等等...)。
因此,为避免绝对路径,您应该将应用程序或测试所需的文件放在匹配的类路径文件夹中。
如果您的文件用于测试,您可以将其移动到 Maven 保留的位置以满足此需求:yourMavenProject/src/test/resources
如果您的文件是为应用程序准备的,您可以将其移动到 Maven 保留的位置以满足此需求:yourMavenProject/src/main/resources
现在您可以通过以下方式访问它:
Path path = Paths.get(YourClass.class.getResource("filter.xml").toURI());