如何将数据读入char数组?

时间:2014-03-12 12:27:21

标签: java filereader

这是将一个文件的数据复制到第二个文件的代码

      public class Writer 
      {
          public static void main(String args[]) throws IOException
          {
              File f=new File("D:/test.txt");
              FileReader fr=new FileReader(f);
              char cbuff[]=new char[100];
              int c=fr.read(cbuff);
              System.out.println(c);
              c=fr.read(cbuff);
              System.out.println(c);
              fr.close();

              FileWriter fw=new FileWriter("D:/newTest.txt");
              fw.write(cbuff);
              fw.close();
          }   
      }

输出为
67个
-1
我的第一个问题是
我想知道char数组的大小是1000,那么为什么read方法第二次返回-1。

我的第二个问题是 加。至[Java Docs](http://docs.oracle.com/javase/7/docs/api/java/io/Reader.html#read%28java.nio.CharBuffer%29

  如果此字符源位于其末尾,则

或-1


 上述行的含义是什么?

3 个答案:

答案 0 :(得分:1)

当你这样做时:

fr.read(cbuff);

由于您只有67个字符,因此您已经读取了整个文件,因此下次光标位于文件末尾时,它将返回-1。在另一个世界里,没有什么可读的。

答案 1 :(得分:1)

  

我想知道char数组的大小是1000,那么为什么read方法第二次返回-1。

因为输入流不包含要读取的字符。请注意,如果有第二次读取,则会覆盖已读入数组的内容。

你的javadoc指向了错误的方法。您使用the read() method taking a char[] as an argumentCharBuffer不是char[]

最后(你最近问了一个关于这个问题的问题,我已经告诉你了),你应该指定你用来读取文件和写入文件的编码。

答案 2 :(得分:1)

当你第一次通过 fr.read(cbuff)阅读时,它正在读取文件中的字符,并且总字符数为67,所以它显示67现在光标移动到下次当你结束文件时正在阅读然后发现 EOF 这就是为什么返回-1。