Java 无法通过帮助器类在servlet中打开属性文件

Java 无法通过帮助器类在servlet中打开属性文件,java,servlets,Java,Servlets,我有一个类,其中有一个func,它打开一个属性文件。当我在同一个类中编写main并调用该函数时,我能够打开属性文件n read。但是,当我试图通过创建该类的实例来调用servlet中的同一个func时,我得到了file not found异常 这是我在类中编写的用于读取属性文件的函数。我的类和servlet都在src文件夹中。我正在使用EclipseIDE 代码: private void readproperties文件和字段列表数据(){ 字符串PROP_FILE=“./src/fields

我有一个类,其中有一个func,它打开一个属性文件。当我在同一个类中编写main并调用该函数时,我能够打开属性文件n read。但是,当我试图通过创建该类的实例来调用servlet中的同一个func时,我得到了file not found异常

这是我在类中编写的用于读取属性文件的函数。我的类和servlet都在src文件夹中。我正在使用EclipseIDE

代码:

private void readproperties文件和字段列表数据(){
字符串PROP_FILE=“./src/fields.properties”;
试一试{
FileReader=新的FileReader(PROP_文件);
BufferedReader br=新的BufferedReader(读卡器);
ArrayList字段=新建ArrayList();
而((str=br.readLine())!=null){
如果(!str.startsWith(“#”)和&str.trim().length()>0){
//系统输出打印项次(str);
字段。添加(str);
计数++;
}
}
}

请编写一个小测试,用于将“PROP_file”的文件路径打印到日志或控制台。 看来,你的相对路径是不正确的

您的相对路径起点可能会更改,具体取决于*.exe文件的启动位置

你的测试应该打印出来

File tFile = new File(PROP_FILE);
// print tFile.getAbsolutePath()
最好打电话去上一节特殊的课

SomeClass.class.getResource(name)
来自包的Eclipse RCP

编辑:

请检查资源是否是*.jar的一部分。可能是,您没有将其添加到build.properties文件中。
在读取属性文件之前,请检查文件是否存在。

请编写一个小测试,用于将“PROP_file”的文件路径打印到日志或控制台。 看来,你的相对路径是不正确的

您的相对路径起点可能会更改,具体取决于*.exe文件的启动位置

你的测试应该打印出来

File tFile = new File(PROP_FILE);
// print tFile.getAbsolutePath()
最好打电话去上一节特殊的课

SomeClass.class.getResource(name)
来自包的Eclipse RCP

编辑:

请检查资源是否是*.jar的一部分。可能是,您没有将其添加到build.properties文件中。
在读取属性文件之前,请检查文件是否存在。

您依赖于磁盘文件系统路径的当前工作目录。当前工作目录取决于应用程序的启动方式,并且不可从应用程序内部控制。依赖它是一个非常糟糕的主意

通常的做法是将该文件放在类路径中或将其路径添加到类路径中。您的文件显然已经在类路径中(您将其放在
src
文件夹中),因此您不需要更改任何其他内容。您应该通过类加载器从类路径获取它。这比磁盘文件系统路径更具可移植性

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("fields.properties");
// ...
另见:

与具体问题无关你基本上是在重新创造。不要这样做。使用以下结构:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("fields.properties");
Properties properties = new Properties();
properties.load(input);
// ...

您依赖于磁盘文件系统路径的当前工作目录。当前工作目录取决于应用程序的启动方式,并且无法从应用程序内部控制。依赖它是一个非常糟糕的主意

通常的做法是将该文件放在类路径中或将其路径添加到类路径中。您的文件显然已经在类路径中(您将其放在
src
文件夹中),因此您不需要更改任何其他内容。您应该通过类加载器从类路径获取它。这比磁盘文件系统路径更具可移植性

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("fields.properties");
// ...
另见:

与具体问题无关你基本上是在重新创造。不要这样做。使用以下结构:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("fields.properties");
Properties properties = new Properties();
properties.load(input);
// ...

如何运行servlet?什么servlet容器?如何将代码部署到servlet容器?通过“/source..”引用PROP_文件这意味着它与当前工作目录相关。这很可能在servlet上下文中不起作用。如何运行servlet?哪个servlet容器?如何将代码部署到servlet容器?通过“/source..”引用PROP_文件这意味着它与当前工作目录相对。这很可能在servlet上下文中不起作用。感谢回复Markus。我打印了绝对路径。它打印了正确的路径。文件打开操作在main()中工作类的,它在src文件夹中。但是,不能从类外部执行相同的操作,即从servlet,它也在src文件夹中。感谢回复Markus。我打印了绝对路径。它打印了正确的路径。文件打开操作在main()中工作但是,无法从类外部,即从同样位于src文件夹中的servlet执行相同的操作。