2011-05-01 75 views
1

我想这听起来很疯狂,但我正在从一个文件中读取,而且它似乎跳过了文件的第一行。为什么用BufferedReader读取文件注释的第一行?

这是怎么回事?

这里是源:


    private void loadFile(String fileNPath) 
    { 
     StringBuilder currentFileContents = new StringBuilder(); 
     CharBuffer contentsBuffer = CharBuffer.allocate(65536); 

     int status=0; 
     try 
     { 
      BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 

      while(status!=-1) 
      { 
       status=in.read(contentsBuffer); 
       currentFileContents.append(contentsBuffer); 
       contentsBuffer.clear(); 
      } 

      System.out.println(currentFileContents.toString()); 
     } 
     catch(FileNotFoundException n) 
     { 
      //Should be imposible 
     } 
     catch(IOException n) 
     { 
      n.printStackTrace(System.out); 
     } 

    } 

它必须是什么我俯瞰。

我复制并粘贴确切的来源,所以我希望这也发生在你身上。

感谢, caalip

+0

我只拿到文件的第二行,然后。 – 2011-05-01 22:02:27

回答

0

我会用文件实用程序。 readFileToString(文件)它在一行中做到这一点。

但是,当我在文本文件上运行代码时,我会看到每一行。我怀疑问题不在你的代码中。

+0

你的意思是apache commons FileUtils? – 2011-05-01 22:01:34

+0

是的,我添加了一个链接并更正了方法的名称。 – 2011-05-01 22:10:15

1

这似乎有点奇怪。尝试更改您的尝试块到:

try 
    { 
     BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 

     status=in.read(contentsBuffer.array(), 0, 65536); 
     currentFileContents.append(contentsBuffer); 

     System.out.println(currentFileContents.toString()); 
    } 

我还没有运行此代码,但给它一个镜头。

更新:我运行了你的代码,遇到了你描述的问题。我用我的修订版运行了代码,它工作正常。

+0

但如果文件大小太大?这个逻辑会起作用吗?我想你正在做的是从0到65536读取文件。但如果尺寸si超过了这个数字呢? – Deepak 2011-05-01 22:31:06

+0

我简单地将CharBuffer中分配的字符数与应读取的字符数进行匹配。如果文件较大,则此方法不适用。 – Zach 2011-05-01 22:34:38

+0

什么是循环中的问题?你有什么想法吗? – Deepak 2011-05-01 22:37:59

3

您是否按照这种方式阅读文件是否有特殊原因?

您使用的父类的方法(BufferedReader没有read(CharBuffer)方法,例如),也...的CharBuffer本身是有点矫枉过正。我怀疑实际的问题是你没有正确使用它(通常你翻转并排空Buffer对象,但我不得不捅更多的东西来看看它是如何操纵它的)

你只需要阅读一个文件是:

StringBuilder currentFileContents = new StringBuilder(); 
try 
{ 
    BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 
    String line = null; 
    while((line = in.readline()) != null) 
    { 
     currentFileContents.append(line); 
    } 

    System.out.println(currentFileContents.toString()); 
} 
catch(FileNotFoundException n) 
{ 
    //Should be imposible 
} 
catch(IOException n) 
{ 
    n.printStackTrace(System.out); 
} 
+0

我认为一次读取数据可能会比较慢。 – 2011-05-02 11:39:30

+0

嗯......是的......这就是所谓的“过早优化”,可能不正确。这就是为什么你首先使用BufferedReader的原因。 – 2011-05-02 13:28:18

相关问题