• 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);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    文件放在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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    代码如下:

    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"));
    
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    参考资料

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

  • 相关阅读:
    yolov5训练自己的数据集但推理报错
    【UCB操作系统CS162项目】Pintos Lab2:用户程序 User Programs(上)
    0-spring源码开班典礼--学习源码的方法论
    NAT网络地址转换技术
    计算机毕业设计Java高校教师科研文献管理系统(源码+系统+mysql数据库+lw文档)
    【学习笔记】无线通信与安全
    基于DMF推荐算法的推荐系统 代码+数据 (可作为毕设)
    知识讲解类短视频如何定位?分享三种类型,帮你选择短视频方向
    Java Elasticsearch教程
    【GitHub】Personal Access Token过期导致本地仓库无法直接push到远程
  • 原文地址:https://blog.csdn.net/dlf123321/article/details/127996787