Java 读取文件

JAVA有多种读取文件的方式,其中比较深层次的原理在我的另外一篇文章分析过:JDK核心JAVA源码解析(5) - JAVA File MMAP原理解析,那么,我们有哪些方式去读取一个文件的内容呢?

1. 从ClassPath中读取文件

直接从项目的classpath(maven的话src/main/resource编译之后也会存在于classpath下)读取:

InputStream inputStream = getClass().getClassLoader().getResourceAsStream("test.txt");
StringBuilder resultStringBuilder = new StringBuilder();
try (BufferedReader br
             = new BufferedReader(new InputStreamReader(inputStream))) {
    String line;
    while ((line = br.readLine()) != null) {
        resultStringBuilder.append(line).append("\n");
    }
}
System.out.println(resultStringBuilder.toString());

注意一定要关闭BufferedReader等资源,这里用了JDK7try with resource的特性

2. JDK7中的读取文件内容的方式

利用Path对象省略了各种StreamReader,同时原生自带读取所有内容到内存的方法,在读取比较小的文件所有内容时我们可以考虑这么做:

Path path = Paths.get(getClass().getClassLoader()
                .getResource("test.txt").toURI());
byte[] fileBytes = Files.readAllBytes(path);
String data = new String(fileBytes);
System.out.println(data);

3. JDK8中的读取文件内容的方式

JDK8继续优化了这块的代码,引入了Stream相关框架,同时针对文件读取也能转化为Stream操作:

Path path = Paths.get(getClass().getClassLoader()
                .getResource("test.txt").toURI());
try (Stream<String> lines = Files.lines(path)) {
    String data = lines.collect(Collectors.joining("\n"));
    System.out.println(data);
}

注意这里的Stream<String> lines需要关闭

4. 利用FileUtils读取文件

我们还可以使用commons-io包里面的读取文件相关类FileUtils

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>

利用FileUtils我们连自愿关闭也可以不用关心:

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("test.txt").getFile());
String data = FileUtils.readFileToString(file, "UTF-8");
System.out.println(data);

5. 利用IOUtils读取文件,URL等等

我们还可以通过IOUtils读取各种输入流InputStream

InputStream fis = getClass().getClassLoader().getResourceAsStream("test.txt");
String data = IOUtils.toString(fis, "UTF-8");
System.out.println(data);

读取URL:

URL urlObject = new URL("http://www.baidu.com");
URLConnection urlConnection = urlObject.openConnection();
InputStream inputStream = urlConnection.getInputStream();
String data = IOUtils.toString(inputStream, "UTF-8");
System.out.println(data);

读取Jar包中的文件(例如common-io的/META-INF/LICENSE.txt)

Class clazz = IOUtils.class;
//这里开头的/代表jar包根目录
InputStream inputStream = clazz.getResourceAsStream("/META-INF/LICENSE.txt");
String data = IOUtils.toString(inputStream, "UTF-8");
System.out.println(data);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值