2014-03-12 54 views
0

这是一个文件的复制数据的代码转换成第二个文件如何将数据读入char数组?

 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(); 
      } 
     } 

输出
-1
我的第一个问题是
我想知道字符数组的该尺寸是1000为什么读取方法第二次返回-1。

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

或-1,如果字符的这个源是在其端部


什么是上述线的意思?

回答

1

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

因为输入流不包含更多要读取的字符。请注意,如果有第二次读取,您将覆盖已读入阵列的内容。

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

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

+0

所以这条线是真的“因为你只有67个字符,所以你已经读完整个文件,所以下一次光标将会在文件的末尾,所以它返回-1。在另一个世界里,没有任何东西留给阅读“ – TruePS

+1

是的,就是这样。另外请注意我对第二次阅读的评论。还要注意,对于当前代码,目标文件_will_的长度为100个字符(实际大小取决于编码),而字符67之后的其余部分将填充零。 – fge

+0

好吧,我最后一件事情,在我指出这条线是什么意思的阅读方法“或-1如果这个字符的来源是其末尾 – TruePS

1

,当你这样做:

fr.read(cbuff); 

因为你只有67字符,您已经阅读整个文件,所以下一次光标会在文件的末尾,所以返回-1。在另一个世界上,没有什么可以阅读的。

+0

确定,但在阅读方法的情况下,我指出这条线是什么意思“或-1,如果这个字符的来源是在其末尾” – TruePS

+1

这意味着它会返回字符数已被阅读,花药明智的是,如果文件中没有数据或其完成的读数,它将返回-1。 – Salah

1

当你第一次被fr.read(cbuff)文件和总焦炭在那么它的阅读文字阅读是67,所以它显示67现在光标的移动,当你正在阅读那么下一次文件结尾发现EOF这就是为什么返回-1。