java读取文件

先看项目截图
在这里插入图片描述

public  class FileTest {
    public static void main(String[]args) throws IOException {
        String path = Objects.requireNonNull(FileTest.class.getClassLoader().getResource("config/First.xml")).getPath();
        System.out.println(path);
        System.out.println("***********");
        String result = FileUtils.readFileToString(new File(path), StandardCharsets.UTF_8);
        System.out.println(result);
    }
}

文件放在resources目录下,用上面的方式就能读。

那如果文件放到src目录下呢?
比较麻烦
为什么?因为我们知道java的运行是把后缀名为java的文件进行编译,编译成.class文件, 然后统一放到/Users/dongleifeng/IdeaProjects/parent_pro/spring_boot/target/classes/ 下面这个位置
在这里插入图片描述

我们可以看到target下有两个文件夹一个classes和一个test-classes
如上图所示,我用的ide是idea,idea默认只把
src/main/java 下的后缀名为.java的文件进行了编译,复制到classes文件夹
src/main/resources 下的所有配置文件复制到classes文件夹
还有test下面的对应文件复制到test-classes
加入你把配置文件放到src下面,最终咱们的业务逻辑是在classes文件夹里开始的,那自然就没法感知到原来的src/main/java下面的配置文件了。

怎么办,既然知道了为什么访问不到文件,那想办法让idea把src下面的非java文件也复制到target/classes下面不就OK了?

解决方案见:
https://blog.csdn.net/shifangwannian/article/details/48882201

但是我觉得不好,最好的方式依然是把配置文件放到resources目录下
人家规范都定好了
src下面是源文件
resources下是配置文件
为啥要打破这个规则呢?

另外再附一个读取properties文件的方式
pom如下:

 <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-configuration2</artifactId>
            <version>2.8.0</version>
        </dependency>

        <!-- commons-configuration2 的实现需要依赖commons-beanutils       -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>

代码如下:

package com.alibaba;

import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.fluent.Configurations;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

public  class FileTest {
    public static void main(String[]args) throws IOException, ConfigurationException {

        // 通过FileInputStreamm获取文件流
        String propPath = FileTest.class.getClassLoader().getResource("config/myProp.properties").getPath();
        Properties properties2 = new Properties();
        properties2.load(new FileInputStream(propPath));
        System.out.println("22222222222----> "+properties2.getProperty("my_key"));
        System.out.println("22222222222----> "+properties2.getProperty("my_other_key"));

		// 通过PropertiesConfiguration 
		// PropertiesConfiguration 会去掉value前后的空格
        PropertiesConfiguration propertiesConfiguration = new Configurations().properties(propPath);
        System.out.println("333----> "+propertiesConfiguration.getString("my_key"));
        System.out.println("333----> "+propertiesConfiguration.getLong("password"));


    }
}

参考资料

【Java】读取/加载 properties配置文件的几种方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值