当前位置:课程学习>>第七章 输入输出流>>实践活动




同学们,实践是检验真理问题的唯一标准,运用你们学到的知识实践检验一下能力提升了吗?

实践主题1:文件加密

实践目标1:掌握字符输入、输出流用法。

实践任务1:按模板要求,将[代码]处替换为Java程序代码

实践要求1:编写一个Java应用程序,将已存在的扩展名为.txt文本文件加密后存入到另一个文本文件中。

SecretExample.java

   import java.io.*;

   public class SecretExample {

     public static void main(String[] args) {

        File fileOne=new File("hello.txt"),fileTwo=new File("hello.secret");

        char b[]=new char[100];

        try {

        FileReader in=[代码1] //创建指向fileOne的字符输入流

        FileWriter out=[代码2] //创建指向fileTwo的字符输出流

        int n=-1;

        while((n=in.read(b))!=-1) {

        for(int i=0;i<n;i++)

           b[i]=(char)(b[i]^'a');

           [代码3] //out将数组b的前n单元写到文件

         }

           [代码4] //out关闭

           in=[代码5] //创建指向fileTwo的字符输入流

           System.out.println("加密后的文件内容:");

           while((n=in.read(b))!=-1) {

              String str=new String(b,0,n);

              System.out.println(str);

          }

          in=[代码6] //创建指向fileTwo的字符输入流

          System.out.println("解密后的文件内容:");

          while((n=in.read(b))!=-1) {

            for(int i=0;i<n;i++)

            b[i]=(char)(b[i]^'a');

            System.out.println(new String(b,0,n));

         }

        [代码7] //in关闭

     }

     catch(IOException e) {

       System.out.println(e);

     }

  }

}       

教师分析:

这个实践主要是加强对字符输入输出流的掌握。参考代码如下:

FileReader in=new FileReader(fileOne);    //[代码1]

FileWriter out=new FileWriter(fileTwo);    //[代码2]

out.write(b,0,n);                   //[代码3]

out.close();                  //[代码4]

in=new FileReader(fileTwo);              //[代码5]

in=new FileReader(fileTwo);                   //[代码6]

in.close();                   //[代码7]

 

实践主题2:给文件的内容添加行号

实践目标2:掌握字符输入、输出流以及缓冲流的用法。

实践任务2:按模板要求,将[代码]处替换为Java程序代码。

实践要求2:编写一个Java应用程序,给已存在的.txt文本文件添加行号。要求该文本文件事先用文本编辑器编辑完毕,保存在d:\myjava目录中,命名为

ReadExample.java

import java.io.*;

public class ReadExample {

   public static void main(String[] args) {

     File file = new File("d:/myjava", "hello.txt");

     File tempFile = new File("temp.text");

     try {

        FileReader inOne =[代码1] //创建指向文件file的输入流

        BufferedReader inTwo =[代码2] //创建指向inOne file的输入流

        FileWriter tofile =[代码3] //创建指向文件tempFile的输出流

        BufferedWriter out =[代码4] //创建指向tofile的输出流

        String s = null;

        int i = 0;

        s =[代码5] //inTwo读取一行

        while (s != null) {

           i++;

           out.write(i + " " + s);

           out.newLine();

           s =[代码6] //inTwo读取一行

        }

        inOne.close();

        inTwo.close();

        out.flush();

        out.close();

        tofile.close();

        inOne =[代码7] //创建指向文件tempFile的输入流

        inTwo =[代码8] //创建指向inOne file 的输入流

        tofile =[代码9] //创建指向文件file的输出流

        out =[代码10] //创建指向tofile的输出流

        while ((s =[代码11])!=null){ //inTwo读取一行

                out.write(s);

                out.newLine();

        }

        inOne.close();

        inTwo.close();

        out.flush();

        out.close();

        tofile.close();

        inOne =[代码12] //创建指向文件file的输入流

        inTwo =[代码13] //创建指向inOne的输入流

        while ((s =[代码14])!=null){ //inTwo读取一行

                System.out.println(s);

        }

        inOne.close();

        inTwo.close();

        tempFile.delete();

        } catch (IOException e) {

        System.out.println(e);

        }

   }

}

教师分析:

这个实践主要是加强对字符输入、输出流以及缓冲流的掌握。参考代码如下: 

FileReader inOne=new FileReader(file);                //[代码1]

BufferedReader inTwo=new BufferedReader(inOne);   //[代码2]

FileWriter tofile=new FileWriter(tempFile);            //[代码3]

BufferedWriter out=new BufferedWriter(tofile);   //[代码4]

s=inTwo.readLine();               //[代码5]

s=inTwo.readLine();                    //[代码6]

inOne=new FileReader(tempFile);                       //[代码7]

inTwo=new BufferedReader(inOne);                    //[代码8]

tofile=new FileWriter(file);                    //[代码9]

out=new BufferedWriter(tofile);                  //[代码10]

while((s=inTwo.readLine() )!=null)    {              //[代码11]

inOne=new FileReader(file);                 //[代码12]

inTwo=new BufferedReader(inOne);         //[代码13]

while(( s=inTwo.readLine() )!=null)   {           //[代码14]

 

实践主题3:使用RandomAccessFile类处理文件

实践目标3:掌握RandomAccessFile类的使用。

实践任务3:按模板要求,将[代码]处替换为Java程序代码。

实践要求3

(1)使用RandomAccessFile流读取文件,舍去前4行和后6行的内容。

(2)使用RandomAccessFile流将一个文件的内容倒置读出。

RandomExample.java

import java.io.*;

public class RandomExample {

   public static void main(String[] args) {

     File f = new File("hello.txt");

     try {

        RandomAccessFile random =[代码1] //创建指向文件f的random对象

        [代码2] //将random的读取位置定位在文件内容的开始处

        long m = random.length();

        while (m > 0) {

           m = m - 1;

           [代码3] //将random的读取位置定位在距文件开头m个字节

           int c = random.readByte();

           if (c <= 255 && c >= 0)

             System.out.print((char) c);

           else {

            m = m - 1;

            [代码4] //将random的读取位置定位在距文件开头m个字节

            byte cc[] = new byte[2];

            random.readFully(cc);

            System.out.print(new String(cc));

           }

       }

      long forthEndPosition = 0;

      int forth = 1;

      byte n = -1;

      while (([代码5])!=-1 && (forth <= 4)){ //random读取一个字节的数据

        if (n == '\n') {

          forthEndPosition = random.getFilePointer();

          forth++;

       }

    }

    [代码6] //将random的读取位置定位在文件内容的末尾

    long endPosition =[代码7] //获取当前random的读取位置

    long mark = endPosition;

    int j = 1;

    while ((mark >= 0) && (j <= 6)) {

      mark--;

      random.seek(mark);

      n = random.readByte();

      if (n == '\n') {

         endPosition = random.getFilePointer();

         j++;

     }

   }

   [代码8] //将random的读取位置定位在距文件开头forthEndPosition个字节处

   long startPoint = random.getFilePointer();

   while (startPoint < endPosition - 1) {

     n = random.readByte();

     System.out.print((char) n);

     startPoint = random.getFilePointer();

    }

    random.close();

    } catch (IOException ee) {

  }

 }

}

教师分析:

这个实践主要是加强对RandomAccessFile类的掌握。参考代码如下:

RandomAccessFile random=new RandomAccessFile(f,"rw"); //[代码1]

random.seek(0);                    //[代码2]

random.seek(m);                       //[代码3]

random.seek(m);                          //[代码4]

while((n=(byte) random.read() )!= -1 && (forth <=4 ))   { //[代码5]

random.seek(random.length());                   //[代码6]

long endPosition=random.getFilePointer();            //[代码7]

random.seek(forthEndPosition);             //[代码8]

 

进入拓展资源