java快速读取文件

知兮丶青
阅读(1087) 2018-03-13
java快速读取文件
java快速读取文件

如何优雅读取文件,java想简单读写一个文件都要上10行代码。幸好guava和apache commons 都有提供简单操作文件工具。

简单介绍读取文件最后一行、读取文件第一行、读取大文件、往大文件追加内容、按行读取等


下面部分使用apache commons io为例:

可能你需要导入:

commons-io-2.4.jar

guava-23.5-jre.jar



小文件 - 写入文件

File file = new File("C:/Users/john/Desktop/111.txt");
FileUtils.write(file, "你好!\r\n很高兴认识你!", "UTF-8");



小文件 - 读取文件

按行读取,一次性所有行(文件或行大于虚拟机的内存,内存溢出)

File file = new File("C:/Users/john/Desktop/111.txt");
List<String> lines = FileUtils.readLines(file, "UTF-8");
System.out.println(lines);


按文件读取 - 一次性读取文件所有内容(文件大于虚拟机的内存,内存溢出)

File file = new File("C:/Users/john/Desktop/111.txt");
String content = FileUtils.readFileToString(file, "UTF-8");
System.out.println(content);



大文件或小文件 - 追加内容

往文件追加内容 - 尾部追加

File file = new File("C:/Users/john/Desktop/111.txt");
FileUtils.write(file, "我也很高兴认识你!", "UTF-8", true);



大文件或小文件 - 读取文件

当文件很大上了G级等,如果把文件全部读取到内存中,分分钟内容溢出,报 java.lang.OutOfMemoryError 错。

commons io 提供了 LineIterator 来解决这个问题。


读取文件 - 行读取(行大于虚拟机的内存,内存溢出)

File file = new File("C:/Users/john/Desktop/111.txt");
LineIterator lineIterator = null;
try {
    lineIterator = FileUtils.lineIterator(file);
    while (lineIterator.hasNext()) {
        String line = lineIterator.nextLine();
        System.out.println(line);
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    LineIterator.closeQuietly(lineIterator);
}


读取文件 -  读取第一行(行大于虚拟机的内存,内存溢出)

File file = new File("C:/Users/john/Desktop/111.txt");
LineIterator lineIterator = null;
try {
    lineIterator = FileUtils.lineIterator(file);
    if(lineIterator.hasNext()){
        String line = lineIterator.nextLine();
        System.out.println(line);
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    LineIterator.closeQuietly(lineIterator);
}


读取文件 - 读取最后一行(行大于虚拟机的内存,内存溢出)

File file = new File("C:/Users/john/Desktop/111.txt");
RandomAccessFile raf = null;
try {
    raf = new RandomAccessFile(file, "r");
    long len = raf.length();
    long pos = len - 1;
    while (pos > 0) {
        pos--;
        raf.seek(pos);
        if (raf.readByte() == '\n') {
            String row = new String(raf.readLine().getBytes("ISO-8859-1"), "UTF-8");
            System.out.println(row);
            break;
        }
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (raf != null) {
        try {
            raf.close();
        } catch (Exception e2) {
        }
    }
}




相关包:

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

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.5-jre</version>
</dependency>



原创文章,转载请注明出处:https://www.weizhixi.com/article/81.html