解决IntelliJ IDEA无法读取配置*.properties文件的问题

转载自:http://www.cnblogs.com/zqr99/p/7642712.html


1、如果是maven项目。还可以通过配置pom.xml来实现。(测试通过)

造成此问题的原因在于,部署的目录下生成的项目中没有生成相关文件,通过下面的pom配置,可以解决问题

<build>
      <finalName>webApi</finalName>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
               <source>1.8</source>
               <target>1.8</target>
               <encoding>UTF-8</encoding>
            </configuration>
         </plugin>
      </plugins>
      <resources>
         <resource>
            <directory>src/main/resources</directory>
            <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
               <include>**/*.tld</include>
            </includes>
            <filtering>false</filtering>
         </resource>
         <resource>
            <directory>src/main/java</directory>
            <excludes>
               <exclude>**/*.java</exclude>
            </excludes>
         </resource>
      </resources>
   </build>

这样不用对idea设置,也可以使用maven的编译命令编译项目,并复制配置文件到编译好的文件夹中。



2、非maven项目(未测试)

idea对这些配置的文件方式很明显和eclipse是不同的。在idea中有一个 Content Roots的概念。需要为每一个folder配置相应的Content Roots。Content Roots包括resources、sources、tests等。

如图所示:

  • java文件夹被标注为Sources,那么下面的所有子文件夹均为Sources,编译后生成.class文件。
  • Resources文件夹被标注为Resources,那么在该文件夹下的配置文件在编译时会自动复制到编译文件夹中。

那么对于idea来说,就有以下几种解决方案。

  1. 将配置文件放到Resources文件夹中,在代码中添加配置文件的虚拟路径。选中文件,右键-Copy Reference,就可以获取到文件的虚拟路径。
  2. 把配置文件放在com.zjut.ssm.config包中,修改config文件夹的Content Roots为Resources,那么编译后,代码也能识别出来。

以上两种解决方案适用于make project方式来编译项目。



2、如果是maven项目。还可以通过配置pom.xml来实现。(测试通过)

造成此问题的原因在于,部署的目录下生成的项目中没有生成相关文件,通过下面的pom配置,可以解决问题

<build>
      <finalName>webApi</finalName>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
               <source>1.8</source>
               <target>1.8</target>
               <encoding>UTF-8</encoding>
            </configuration>
         </plugin>
      </plugins>
      <resources>
         <resource>
            <directory>src/main/resources</directory>
            <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
               <include>**/*.tld</include>
            </includes>
            <filtering>false</filtering>
         </resource>
         <resource>
            <directory>src/main/java</directory>
            <excludes>
               <exclude>**/*.java</exclude>
            </excludes>
         </resource>
      </resources>
   </build>

这样不用对idea设置,也可以使用maven的编译命令编译项目,并复制配置文件到编译好的文件夹中。

IntelliJ IDEA中编写读取`itcast.properties`资源文件的Servlet,你需要遵循以下步骤: 1. 创建一个Servlet类,继承自`HttpServlet`类,并重写`doGet`或`doPost`方法。 2. 在Servlet类中,使用`InputStream`读取`WEB-INF/classes`目录下的`itcast.properties`文件。因为`WEB-INF`目录下的文件不允许客户端直接访问,所以是安全的。 3. 使用`Properties`类加载这个输入流,从而读取属性文件中的内容。 以下是一个简单的示例代码: ```java import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.IOException; import java.util.Properties; @WebServlet("/readProperties") public class ReadPropertiesServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取文件路径 String filePath = getServletContext().getRealPath("/WEB-INF/classes/itcast.properties"); // 创建Properties对象 Properties prop = new Properties(); // 通过文件路径获取输入流 try (InputStream input = getClass().getClassLoader().getResourceAsStream(filePath)) { if (input == null) { throw new FileNotFoundException("未找到itcast.properties文件"); } // 加载输入流 prop.load(input); // 输出属性内容 prop.forEach((key, value) -> System.out.println(key + " = " + value)); } catch (Exception e) { e.printStackTrace(); } } } ``` 这段代码中,`doGet`方法会在访问`/readProperties`路径时被调用,它会读取`WEB-INF/classes`目录下的`itcast.properties`文件,并将内容输出到控制台。 确保`itcast.properties`文件已经放置在`src/main/resources/WEB-INF/classes`目录下,这样在编译后,它会被自动包含到`WEB-INF/classes`目录中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值