Java路径读取

2022-02-19  本文已影响0人  yikemi

一般获取工程resource的方式

1、首先拿到工程根目录
String rootPath = System.getProperty("user.dir") // D:\temp\repo\demo
2、拼接具体的文件相对路径地址
/src/main/resources/demo.txt

这种一般的方式在普通的maven or gradle工程中运行是没有问题的,但工程一旦打包之后作为jar包依赖,该"user.dir"拿到的不再是打包工程的根目录,无法获取打包工程相应的资源文件。
如果是在Android Studio插件中,拿到的rootPath就是运行时的"user.dir"了,显然这是不正确的,那么就插件的相关功能就无法使用。
JVM启动时通过执行本地方法自动初始化了这个系统属性,"user.dir"代表用户当前的工作目录。

文件流的包装玩法

stream结尾都是采用字节流,reader和writer结尾都是采用字符流
常见的字符输入流用途与区别
(1)Reader:是字符流的抽象基类,它包含了重要方法有read和close
(2)InputStreamReader:可以把InputStream中的字节数据流根据字符编码方式转换成字符数据流。
(3)FileReader:可以把FileInputStream中的字节数据转换成根据字符编码方式转成字符数字流。
(4)BufferedReader:可以把字符输入流进行封装,将数据进行缓冲,提高读取效率。它含有read(末尾返回-1)和readLine()(末尾返回null)。

通过classloader获取工程resource的方式

这里不叙述原理,直接上代码,
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.JarURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**

参考

https://www.cnblogs.com/Hermioner/p/9773188.html
https://www.jianshu.com/p/28693aad491b
https://blog.csdn.net/b_h_l/article/details/7767829
https://my.oschina.net/u/3505620/blog/3275265

上一篇 下一篇

猜你喜欢

热点阅读