1、原因分析

        项目在编译成功后的时候,maven会生成一个target目录,用来存放字节码文件,而真正被JVM(JAVA虚拟机)运行的就是target目录下的字节码文件。

        但是Maven项目在默认情况,不放在resources目录下的文件资源,是不会被编译到target目录中去的。因此就会存在即使文件路径写对了,仍然读取不到文件的情况。

865fb7d6c6e6475fa5bd4ceeab90a847.png

2、问题解决

pom文件中引入以下代码

<build>
    <resources>
        <!--
            这段话的大概意思:如果【src/main/java】目录存在以下结尾的文件时,
        编译生成target的时候,将以下文件编译到target目录中去
        -->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.txt</include>
                <include>**/*.xml</include>
                <include>**/*.yml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>

3、读取文件中的数据


public class FileUploadHandle {

    public static void main(String[] args) throws Exception {

        InputStream inputStream = FileUploadHandle.class.getResourceAsStream("token.txt");
        String authorization = getStringByInputStream(inputStream).trim();

    }

    /**
     * 将文件流转为字符串
     *
     * @param inputStream
     * @return
     */
    public static String getStringByInputStream(InputStream inputStream) {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            byte[] b = new byte[10240];
            int n;
            while ((n = inputStream.read(b)) != -1) {
                outputStream.write(b, 0, n);
            }
            return outputStream.toString();
        } catch (Exception e) {
            throw new RuntimeException("解析文件失败");
        } finally {
            try {
                outputStream.close();
                if (inputStream != null) {
                    inputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐