Apache Common IOUtils使用

268 阅读1分钟

IOUtils使用非常简单,在maven中引入

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

在代码中直接使用接口。

问题

在调用IOUtils.writelines方法过程中发现,写入的数据不完整,具体表现形式如下:

IOUtils.writeLines(resultList,"\n", new FileWriter(path));

resultList的长度为246,但是写入文件中的长度只有174,而且并不完整,很明显写入的调用有问题。查看源码:

public static void writeLines(Collection<?> lines, String lineEnding, Writer writer) throws IOException {
    if (lines != null) {
        if (lineEnding == null) {
            lineEnding = System.lineSeparator();
        }

        for(Iterator var3 = lines.iterator(); var3.hasNext(); writer.write(lineEnding)) {
            Object line = var3.next();
            if (line != null) {
                writer.write(line.toString());
            }
        }

    }
}

跟踪整个过程,list的内容均以写入writer,那为什么到写文件的时候会少数据,只可能是是文件内容没有完全flush到磁盘,进程就结束了,代码调整如下:

List<String> result = getResult
FileWriter fw = new FileWriter(path);
IOUtils.writeLines(result,"\n", fw);
fw.flush();
fw.close();

最后的fw.flush一级close非常重要,我们在打开一个文件或者流之后一定要记得及时关闭流。

小结

apache的一些工具类虽然能够给我们的编程带来很多方便的地方,但是我们在使用的过程一些小的细节也是需要注意的,否则很容易出现已莫名其妙的问题,定位起来也会非常麻烦。