Java 如何读取项目文件夹下而不是源文件夹上的资源

Java 如何读取项目文件夹下而不是源文件夹上的资源,java,file,Java,File,鉴于我下面的项目结构, 如何访问findLoginDetails.txt? 目前,我有 public static String getQueryFromExternalFile(final String path) { String path1 = "src/main/resources/sql/C0001/findLoginDetails.txt"; String query = ""; try { BufferedReader br = new BufferedReader(new

鉴于我下面的项目结构,

如何访问findLoginDetails.txt? 目前,我有

public static String getQueryFromExternalFile(final String path) {
String path1 = "src/main/resources/sql/C0001/findLoginDetails.txt";
String query = "";
try {
  BufferedReader br = new BufferedReader(new FileReader(path1));
  StringBuilder sb = new StringBuilder();
  String line = br.readLine();
  while (line != null) {
    sb.append(line);
    sb.append(System.lineSeparator());
    line = br.readLine();
  }

  query = sb.toString();
  br.close();
} catch (Throwable e) {
  query = "";
  e.printStackTrace();
}
return query;
}


但它不起作用。知道它为什么不起作用吗?

你试过把绝对路径放进去吗


如果在Windows中尝试放置“D:\path\to\file”

是否尝试放置绝对路径


如果在Windows中尝试将“D:\path\to\file”

放到项目根文件夹中,那么最好从类路径中读取它。我假设
resources
文件夹位于构建路径上。这将为您提供所需的便携性

使用

其中“MyClass”是您的类的名称


请参阅以获得更好的理解。

从类路径而不是从项目根文件夹中阅读它更好。我假设
resources
文件夹位于构建路径上。这将为您提供所需的便携性

使用

其中“MyClass”是您的类的名称


请参阅以获得更好的理解。

查看它使用的路径:do path p=Paths.get(path1);System.out.println(p.toAbsolutePath());我得到了C:\pleiades\eclipse\src\main\resources\sql\c001\findLoginDetails.txt,所以它找不到该文件。如何将其指向正确的目录?基本上,我只想让它从项目的根目录开始搜索。不,它返回一个错误src\main\resources\sql\c001\findLoginDetails.txt(系统找不到指定的路径),然后再为查询分配一个值。这个文件是由用户修改的吗?如果是这样,它不应该在src/resources文件夹中,而是在类路径上的文件夹中。然后,您可以通过命令行,或者在Eclipse中,通过运行配置的类路径部分,将文件夹添加到类路径中。如果用户无法配置,那么您确实应该将src/resources设置为源文件夹;System.out.println(p.toAbsolutePath());我得到了C:\pleiades\eclipse\src\main\resources\sql\c001\findLoginDetails.txt,所以它找不到该文件。如何将其指向正确的目录?基本上,我只想让它从项目的根目录开始搜索。不,它返回一个错误src\main\resources\sql\c001\findLoginDetails.txt(系统找不到指定的路径),然后再为查询分配一个值。这个文件是由用户修改的吗?如果是这样,它不应该在src/resources文件夹中,而是在类路径上的文件夹中。然后,您可以通过命令行,或者在Eclipse中,通过运行配置的类路径部分,将文件夹添加到类路径中。如果用户无法配置它,那么您真的应该将src/resources作为源文件夹。是的,我做了,这一个可以工作,但是,我不想这样做。我想让它从项目的目录中查看。@paaaat您能试试吗../?其他选项将是设置类路径或路径变量。是的,我这样做了,这个可行,但我不想这样做。我想让它从项目目录中查看。@paaaat您能试试吗?/?其他选项将是设置类路径或路径变量。
BufferedReader r = new BufferedReader(
   new InputStreamReader(MyClass.class.getClassLoader().getResourceAsStream(
     "sql/C0001/findLoginDetails")));