Java从大文件中逐行读取\ n仅限

时间:2014-04-20 04:03:06

标签: java

我有一个文件,记录以“\ n”结尾,列以X“01”结尾,第一个非打印字符。它很大... 7GB,这将完全拧紧我的笔记本电脑内存。

我已经做了一些谷歌如何使用BufferReader等逐行阅读大文件。等。 但是LINE的定义有点不同,readline函数将返回以“\ n”,“^ M”..等结尾的行。

我想知道Java 6/7中是否有一个逐行读取大文件的解决方案,其定义是仅以\ n为单位的行结尾。

谢谢!

我有一个sample data set here,想知道是否有人能够对抗sample data并提取每一行的第一列时间戳。

这是我所做的,但它只在第一行读到,

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class ParseAdafruit {

    public static void main(String[] args) throws IOException {
        // Predefine the delimiter ^A
        String delimiter = String.valueOf((char) 1);

        Scanner scanner = new Scanner(new File("/Users/.../data")).useDelimiter("\\n");
        while (scanner.hasNext()) {
            String line = scanner.next(); // This is your line
            String[] parts = line.split(delimiter);
            System.out.println(parts[0]);
        }
    }
}

输出

2014-01-28 18:00:41.960205
不过,通过使用类似的东西,我在Python中玩得很开心:

for line in sys.stdin: 
    print line.split(chr(1))[0]

2 个答案:

答案 0 :(得分:3)

这是设置Scanner以将文件中的字符串分隔为“\ n”的方法。我不知道你对每一行做了什么,但如果你想把文件读成一个字符串,请使用StringBuilder(或StringBuffer进行同步),因为String是不可变的。< / p>

Scanner scanner = new Scanner(new File("PathToFile")).useDelimiter("\\n");
while (scanner.hasNext()) {
    scanner.next(); // This is your line
}

答案 1 :(得分:1)

似乎文件编码很重要,所以我们在运行扫描仪之前将文件读作UTF-8

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.Scanner;

...

String fileDir = "pathtodata";
try
{
    BufferedReader in = new BufferedReader(new InputStreamReader(
            new FileInputStream(fileDir), "UTF8"));

    Scanner scanner = new Scanner(in).useDelimiter("\\n");
    while (scanner.hasNext())
    {
        String line = scanner.next(); // This is your line
        String[] parts = line.split(delimiter);
        System.out.println(parts[0]);
    }
    scanner.close();
    in.close();
}
catch (Exception e)
{
    e.printStackTrace();
}