【问题标题】:Java: How read a File line by line by ignoring "\n"Java:如何通过忽略“\ n”逐行读取文件
【发布时间】:2013-05-23 10:55:22
【问题描述】:

我正在尝试每行读取一个制表符分隔的文本文件行。使用回车符 ("\r\n") 分隔行,并且允许在制表符分隔的文本字段中使用换行符 (\"n")。

由于我想读取每行的文件行,我希望我的程序忽略一个独立的“\n”。 不幸的是,BufferedReader 使用这两种可能性来分隔行。如何修改我的代码,以忽略独立的“\n”?

try 
{
    BufferedReader in = new BufferedReader(new FileReader(flatFile));
    String line = null;
    while ((line = in.readLine()) != null) 
    {
        String cells[] = line.split("\t");                          
        System.out.println(cells.length);
        System.out.println(line);
    }
    in.close();
} 
catch (IOException e) 
{
    e.printStackTrace();
}

【问题讨论】:

    标签: java bufferedreader text-parsing carriage-return linefeed


    【解决方案1】:

    使用java.util.Scanner

    Scanner scanner = new Scanner(new File(flatFile));
    scanner.useDelimiter("\r\n");
    while (scanner.hasNext()) {
        String line = scanner.next();
        String cells[] = line.split("\t");                          
        System.out.println(cells.length);
        System.out.println(line);
    }
    

    【讨论】:

    • 方法名实际上是useDelimiter(编辑必须至少6个字符,所以我不能自己编辑答案)
    • @Krige - 非常感谢。我已经修好了。
    【解决方案2】:

    你可以简单地让它跳过空行:

    while ((line = in.readLine()) != null) {
        // Skip lines that are empty or only contain whitespace
        if (line.trim().isEmpty()) {
            continue;
        }
    
        String[] cells = line.split("\t");
        System.out.println(cells.length);
        System.out.println(line);
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 apache commons-io 中的 FileUtils.readLines 方法。

      使用它的好处是你不必关心打开和关闭文件。它为您处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-22
        • 2013-08-30
        • 1970-01-01
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-14
        相关资源
        最近更新 更多