下面这个程序实现向文件写入Fibonaci数列的前20项,怎样才能把写入的20项每5项为一行,分4行写入文件里?
import  java.io.*;
public class c14_4 {
                      /*
 * 将Fibonaci数列的前20项输入到一个文件里,
 */
public static void main(String[] args) throws IOException{
      File dir=new File("homeworkData");
      dir.mkdir();
      File f=new File(dir,"c14_4.txt");
      f.createNewFile();
      DataOutputStream dout=new DataOutputStream(new BufferedOutputStream( 
                                           new FileOutputStream(f)));
      long[] fibonaci=new long[20];
      fibonaci[0]=1;
      fibonaci[1]=1;
      for(int i=2;i<fibonaci.length;i++) //用数组来存储Fibonaci数列的前20项
      {
       fibonaci[i]=fibonaci[i-1]+fibonaci[i-2];
            }
      for(int i=1;i<=fibonaci.length;i++)   //将Fibonaci数列的前20项写入到文件中
      {
       dout.writeLong(fibonaci[i-1]);
      }
      dout.flush();
      dout.close();
}
}

解决方案 »

  1.   

    答:参考代码:import  java.io.*; 
    public class c14_4 { 
                          /* 
    * 将Fibonaci数列的前20项输入到一个文件里, 
    */ 
    public static void main(String[] args) throws IOException{ 
          File dir=new File("homeworkData"); 
          dir.mkdir(); 
          File f=new File(dir,"c14_4.txt"); 
          f.createNewFile(); 
         PrintWriter pw=new PrintWriter(new FileWriter(f));
          long[] fibonaci=new long[20]; 
          fibonaci[0]=1; 
          fibonaci[1]=1; 
          for(int i=2;i <fibonaci.length;i++) //用数组来存储Fibonaci数列的前20项 
          { 
          fibonaci[i]=fibonaci[i-1]+fibonaci[i-2]; 
                } 
          for(int i=1;i <=fibonaci.length;i++)  //将Fibonaci数列的前20项写入到文件中 
          { 
           pw.print(fibonaci[i-1]+" "); 
           if(i % 5==0 ) pw.println();//本行已输出5个,则换行.
          } 
          pw.flush(); 
          pw.close(); 


    c14_4.txt中文件内容是:
    1 1 2 3 5 
    8 13 21 34 55 
    89 144 233 377 610 
    987 1597 2584 4181 6765 
      

  2.   

    你这里用的是PrintWriter,是字符流,我题目里写的要求用字节流,也怪我没强调清楚。
    用PrintStream也许就可以了,它里面有println()、print(long x)两个方法,应该可以了吧,大家的建议呢?我还没有去测试过,到底行不行,希望大家也去测试一下。
    吃了饭我再测试吧。
      

  3.   


    public static void main(String[] args) throws Throwable {
    File dir=new File("homeworkData");
    dir.mkdir();
    File f=new File(dir,"c14_4.txt");
    f.createNewFile(); 
    DataOutputStream dout = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f)));
    long[] fibonaci = new long[20];
    fibonaci[0] = 1;
    fibonaci[1] = 1;
    for (int i = 2; i < fibonaci.length; i++) // 用数组来存储Fibonaci数列的前20项
    {
    fibonaci[i] = fibonaci[i - 1] + fibonaci[i - 2];
    }
    for (int i = 1; i <= fibonaci.length; i++) // 将Fibonaci数列的前20项写入到文件中,如果到第五个则加一个换行
    {
    dout.writeBytes(String.valueOf(fibonaci[i-1])+" "+(i%5==0?"\r\n":""));
    }
    dout.flush();
    dout.close();
    }结果:
    1 1 2 3 5 
    8 13 21 34 55 
    89 144 233 377 610 
    987 1597 2584 4181 6765 要的是不是这样的,不过为什么非得要用字节流呢?
      

  4.   

    我是这样考虑的:仅通过字节流将Fibonaci数列的前20项输入到一个文件当中,并且要求每5项1行,再通过字节流或字符流将20项从文件里读出来,显示到控制台上。
    我是初学IO包,不太清楚该怎么做啊?
      

  5.   

    感觉你这个需求用字符流来做比较合适,因为你要读写的都是字符,而且要求有换行,用字节流也是先把字符变成字节然后再写或者读出字节变成字符再显示,所以感觉用字节流就不如用字符流来的方便,字节流一般是用来读写二进制的数据的,比如读写zip文件啊图片文件什么的。
      

  6.   

    谢谢你的这番解释。
    感觉把换行这个要求去掉更好,你说呢?干脆用DataOutputStream写进去的是long类型的数据,用DataInputStrean读long类型的数据