【问题标题】:How to skip a part of the file then read a line?如何跳过文件的一部分然后读取一行?
【发布时间】:2016-04-19 20:52:33
【问题描述】:

我有一个使用缓冲读取器读取文件并拆分的代码,所述文件是通过在文件开头自动添加 4KB 空白空间的方法创建的,这导致当我读取时发生以下情况:

首先是代码:

BufferedReader metaRead = new BufferedReader(new FileReader(metaFile));
String metaLine = "";
String [] metaData = new String [100000];

        while ((metaLine = metaRead.readLine()) != null){
            metaData = metaLine.split(",");
            for (int i = 0; i < metaData.length; i++){
                System.out.println(metaData[i]);
        }
        }

这是结果,请记住此文件已经存在并包含值:

    //4096 spaces then the first actual word in the document which is --> testTable2
Name
java.lang.String
true
No Reference

有没有办法跳过前 4096 个空格,直接得到文件中的实际值,这样我就可以定期得到结果?因为稍后我将在其他操作中使用元数据数组,而且我很确定空格会弄乱数组中的槽数。任何建议,将不胜感激。

【问题讨论】:

  • 你考虑过吗,呃,BufferedReader.skip()
  • 为什么不修复文件创建以摆脱无意义的 4K 空间呢?而不是构建合作错误?

标签: java file split bufferedreader


【解决方案1】:

如果您使用的是 Eclipse,自动完成功能应该会有所帮助。

metaRead.skip(4096);

https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

【讨论】:

  • 我可能误读了您的问题。你想跳过 4096 个空格,而不是字节?
  • 同样的事情,Reader.skip() 跳过字符。
  • 我的意思是,如果他有一堆字符,其中一些是字母、数字等,并且他想跳过 4096 个空格,那么这是行不通的。但我认为数字 4096 是一个很大的线索。
【解决方案2】:

你可以(如前所述)简单地做:

metaRead.skip(4096);

如果空格总是占用那么多字符,或者你可以避免空行

while ((metaLine = metaRead.readLine()) != null){
    if(metaLine.trim().length() > 0){
        metaData = metaLine.split(",");
        for (int i = 0; i < metaData.length; i++){
            System.out.println(metaData[i]);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2018-08-20
    • 2020-09-18
    • 2022-01-15
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多