【问题标题】:Java reading text lines without line separatorsJava读取没有行分隔符的文本行
【发布时间】:2012-04-23 18:28:01
【问题描述】:

为了处理搜索日志文件,我正在编写一个 Java 类,它应该逐行读取和处理文件内容。

日志文件中的文本如下所示

[Integer User ID] [Queury] [Date: YYYY-MM-DD HH:MM:SS] [optional url]

我尝试使用扫描仪并使用 nextLine() 读取行,但这会将整个文件读取为一行。知道如何确保一次只能获得一条线路吗?

【问题讨论】:

    标签: java file


    【解决方案1】:

    您可以直接抓取整个文件,然后拆分数据:

    for ( String line : "the entire file".split( System.getProperty("line.separator") )
    {
         System.out.println( line );
    }
    

    附带说明:System.getProperty("line.separator") 是通用换行符。

    另一种方法:

    BufferedReader bufferedReader = new BufferedReader( new FileReader( "absolute file path" ) );
    
    String line;
    
    while ( ( line = bufferedReader.readLine() ) != null)
    {
         System.out.println( line );
    }
    

    【讨论】:

    • 日志文件通常很大,可以一次加载到内存中。不仅如此,.split 还会导致分配两倍!
    • Fermin Silva 说的差不多,我们在这里讨论的是 212mb 的 txt 文件
    • @Rickyfox 我使用 bufferedReader 添加了第二种方法。
    【解决方案2】:

    尝试使用BufferedReader 而不是Scanner。 BufferedReader 可以容忍各种不同类型的行终止符 - Scanner 可能总是需要您的平台默认行终止符。

    或者,使用Guava,它可以让您非常轻松地做到这一点,例如使用CharStreams.readLines,可能指定LineProcessor。

    【讨论】:

    • 如果我没记错的话,我在尝试 bufferedReader 时遇到了同样的问题,但我会仔细检查一下
    • @Rickyfox:如果你这样做了,那表明你要么没有正确读取文件(编码问题?),要么你的文件有奇怪的行尾。 是文件的编码是什么?
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2019-12-07
    • 2020-11-21
    相关资源
    最近更新 更多