我有一个文件,记录以“\ 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]
答案 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();
}