IO流复习

1 篇文章 0 订阅

 章节练习题及面试题

 

什么是java序列化,如何实现java序列化?

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。

可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。

序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,

implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

 

使用处理流的优势有哪些?如何识别所使用的流是处理流还是节点流?

【答案】

【优势】对开发人员来说,使用处理流进行输入/输出操作更简单;使用处理流的执行效率更高。

【判别】

处理流的构造器的参数不是一个物理节点,而是已经存在的流。而节点流都是直接以物理IO及节点作为构造器参数的。

 

填空

下列程序将从file1.dat文件中读取全部数据,然后写到file2.dat文件中。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

 

public class FileStreamInOut {

    public static void main(String[] args) {

       try {

           File inFile = new File("file1.dat");

           File outFile = new File("file2.dat");

           FileInputStream fis = new FileInputStream(_inFile________);

           FileOutputStream fos = new FileOutputStream(__outFile_______);

           int c;

           while ((c = fis.read()) != -1) {

              fos.write(c);

           }

           __fis___.close();

           __fos___.close();

       } catch (FileNotFoundException e) {

           System.out.println("FileStreamsTest:" + e);

       } catch (IOException e) {

           System.out.println("FileStreamTest" + e);

       }

    }

}

 

Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请指出它们分别是哪些类?

【答案】Java中按所操作的数据单元的不同,分为字节流和字符流。

字节流继承于InputStream和OutputStream类;

字符流继承于Reader和Writer。

按流的流向的不同,分为输入流和输出流。

按流的角色来分,可分为节点流和处理流。缓冲流、转换流、对象流和打印流等都属于处理流,使得输入/输出更简单,执行效率更高。

 

什么是标准的I/O流?

在java语言中,用stdin表示键盘,用stdout表示监视器。他们均被封装在System类的类变量in 和out中,对应于系统调用System.in和System.out。这样的两个流加上System.err统称为标准流,它们是在System类中声明的3个类变量:

public static InputStream in

public static PrintStream out

public static PrintStream err

 

数组有没有length()方法?String有没有length()方法?File有没有length()方法?ArrayList有没有length()方法?

数组没有length()方法,但是有length属性。

String和File有length()方法。

ArrayList没有length()方法,有size()方法获取有效元素个数。

 

选择

1.计算机处理的数据最终分解为▁▁的组合。AD

A 0

B 数据包

C 字母

D 1

2.计算机处理的最小数据单元称为▁▁。B

A 位

B 字节

C 兆

D 文件

3.字母、数字和特殊符号称为▁▁。C 字符的概念

A 位

B 字节

C 字符

D 文件

4.▁▁文件流类的 close 方法可用于关闭文件。ABC 文件流可以用close关闭

A FileOutputStream

B FileInputStream

C RandomAccessFile

D FileWrite

5.RandomAccessFile 类的▁▁方法可用于从指定流上读取整数。A

A readInt

B readLine

C seek

D close

6.RandomAccessFile 类的▁▁方法可用于从指定流上读取字符串。B

A readInt

B readLine

C seek

D close

7.RandomAccessFile 类的▁▁方法可用于设置文件定位指针在文件中的位置。C

A readInt

B readLiIne

C seek

D close

8.在FilterOutputStream类的构造方法中,下面哪个类是合法:C FilterOutputStream类中只有一种结构:public FilterOutputStream(OutputStream)

A File

B InputStream

C OutputStream

D FileOutputStream

 

 

【答案】

1.难度:容易答案:AD 知识点:计算机最终能处理的数据只能为 0 和 1。

2.难度:容易答案:B 知识点:计算机处理的最小数据单元是字节。

 

3.难度:容易答案:C 知识点:字符的概念。

4.难度:适中答案: ABC 知识点:FileOutStream、FileInputStream、RandomAccessFile

文件流类的 close 方法可用于关闭文件。

5.难度:适中答案:A 知识点:readInt方法的使用。

6.难度:适中答案:B 知识点:readLIne方法的使用。

7.难度:适中答案:C 知识点:seek 方法的使用。

8.难度:适中答案:C 知识点:在FilterOutputStream类中只有一种结构:public

FilterOutputStream(OutputStream)。

 

 

 

编程题

分别使用字节流和字符流完成以下程序:

 

1. 在指定的路径下新建一个 .txt 文件 "test.txt",利用程序在文件中写入如下内容:

 

"Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于 1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有 卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科 学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互 联网的产业环境下,Java更具备了显著优势和广阔前景。"

 

2. 利用程序读取 test.txt 文件的内容, 并在控制台打印

 

3. 利用程序复制 test.txt 为 test1.txt

/**

 * @author Eightn0

 * @create 2021-03-22 11:21

 * 功能:1. 在指定的路径下新建一个 .txt 文件 "test.txt",利用程序在文件中写入如下内容:

            "Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,

            是由Sun Microsystems公司于 19955月推出的Java程序设计语言和Java平台

            (即JavaSE, JavaEE, JavaME)的总称。Java 技术具有 卓越的通用性、高效性、

            平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科 学超级计算机、移动电话和互联网,

            同时拥有全球最大的开发者专业社群。在全球云计算和移动互 联网的产业环境下,Java更具备了显著优势和广阔前景。"

    2. 利用程序读取 test.txt 文件的内容, 并在控制台打印

    3. 利用程序复制 test.txt test1.txt

 */

/*输入指定内容*/

public class ReadAndWrite {

    public static void main(String[] args) {

        File file = new File("test.txt");

        FileWriter fileWriter = null;

        try {

            fileWriter = new FileWriter(file);

            fileWriter.write("Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于 19955月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有 卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科 学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互 联网的产业环境下,Java更具备了显著优势和广阔前景。");

        } catch (IOException e) {

            e.printStackTrace();

        }

 

        try {

            fileWriter.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

 

        /*2. 利用程序读取 test.txt 文件的内容, 并在控制台打印*/

        FileReader fileReader = null;

        try {

            fileReader = new FileReader(file);

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        }

 

        char[] cbuf = new char[5];

        int len;

        try {

            while ( (len = fileReader.read(cbuf)) != -1){

                for (int i = 0; i < len; i++) {

                    System.out.print(cbuf[i]);

                }

            }

        }

        catch (IOException e) {

            e.printStackTrace();

        }

 

        try {

            fileReader.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

 

        /*利用程序复制 test.txt test1.txt*/

        File file2 = new File("test.txt");

        File file1 = new File("text1.txt");

        FileReader fileReader1 = null;

        FileWriter fileWriter1 = null;

        try {

            fileReader1 = new FileReader(file2);

            fileWriter1 = new FileWriter(file1);

        } catch (IOException e) {

            e.printStackTrace();

        }

 

        char[] chars = new char[5];

        int lens;

        try {

            while ((lens = fileReader1.read(chars)) != -1){

                fileWriter1.write(chars,0,lens);

            }

        }catch (IOException e){

            e.printStackTrace();

        }

 

        try {

            fileWriter1.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

        try {

            fileReader1.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

4. 列出当前目录下全部java文件的名称

5. 列出d:\ch9目录下Java源文件的名字及其大小,并删除其中的一个Java源文件?

6. 使用File类下的常用方法获取某些文件的信息。

7. 操作D盘下的my.txt文件

  1. 判断my.txt文件是否存在
  2. 若存在则删除;若不存在则创建

/**

 * @author Eightn0

 * @create 2021-03-22 14:58

 *   列出当前目录下全部java文件的名称

     列出review目录下文件的名字及其大小,并删除其中的一个

     使用File类下的常用方法获取某些文件的信息。

     操作D盘下的my.txt文件:判断my.txt文件是否存在;若存在则删除;若不存在则创建

 */

public class ObtainFile {

     public static void main(String[] args) {

          /*列出当前目录下全部java文件的名称*/

          File file = new File("D:\\documents\\java\\IDEACode\\javareview\\src\\io");

          String[] list = file.list();//获取文件名

          for (String string: list) {

               if (string.endsWith("java")){

               System.out.println(string);}

          }

 

          System.out.println("******************************************");

          /*列出javareview目录下Java源文件的名字及其大小,并删除其中的一个Java源文件*/

          File file1 = new File("D:\\documents\\java\\IDEACode\\javareview");

          if (file1.exists()){

               if (file1.isDirectory()){

                    File[] files = file1.listFiles();

                    for (File file2 : files) {

                         System.out.println(file2+""+file2.length());//获取字节长度

                         if (file2.getName().equals("text1.txt") ){

                              file2.delete();

                         }

                    }

               }

          }

 

          System.out.println("************************************************");

          /*操作D盘下的my.txt文件:判断my.txt文件是否存在;若存在则删除;若不存在则创建*/

          File file3 = new File("D:");

          File[] filess = file3.listFiles();

          for (File f : filess) {

               if (f.getName().equals("my.txt")){

                    f.delete();

               }else {

                    File ff = new File("my.txt");

               }

          }

     }

}

8. File类的作用是什么?它是一种流吗?

创建、删除、判断、获取信息

File是一个类,不是一种流,声明在java.io

9. 使用File类删除某个文件夹(例如D盘下的temp文件夹)下的所有文件和文件夹:

  1. 判断temp文件夹下的文件类型,如果是文件则直接删除
  2. 如果是文件夹则获取该文件夹下的子文件和文件夹
  3. 使用递归的方式删除所有temp文件夹下的文件和文件夹

 

10. 利用IO操作文件

1)利用代码在D盘下创建news文件夹。

2)利用代码在news文件夹下创建2个.docx文件,2个.java文件,2个.txt的文件(在控制台打印news文件夹下的.java文件

11. 利用IO流操作文件

1)利用Java代码创建D:\temp\temp1\temp2共3个文件夹

2)在temp文件夹下创建一个1.txt文件内容为hello,创建一个Hello.java文件

3)内容为public static void main(String[] args){},在temp1文件夹下创建同样的两个文件

4)输出temp文件夹下包括其子文件夹下,所有的.java文件

12. 利用IO流操作文件

  1. 利用java代码在D盘下创建一个mytemp文件夹
  2. 显示D盘下所有的.Java文件,包括D盘的子文件夹下的.java文件
  3. 把上述显示的文件都复制到mytemp文件夹中

13. 列出D盘下的所有文件,子目录中的文件,子目录的子目录都要列出,依次类推,总之D盘下所有的文件都要输出(50分)

  1. 在列出的时候判断是否子文件夹(10分)
  2. 若不是子文件夹直接输出文件名(20分)
  3. 若是子文件夹使用递归的形式继续输出子目录中的文件(20分)

14. 先将“欢迎您来北京尚硅谷学习,高薪就业”写入到文件”hello.txt”中,再读取该文件中的内容。

15. 如果准备读取一个文件的内容,应当使用FileInputStream流还是FileOutputStream流?

fileinputstream

16. 编写一个应用程序,将用户从键盘输入的10个整数存入文件,再顺序读出。

17. BufferedReader流能直接指向一个文件对象吗?

18. 列出D盘下的所有文件,子目录中的文件,子目录的子目录都要列出,依次类推,总之D盘下所有的文件都要输出。

19. 编写程序向文本文件中写入自己的信息,格式为:姓名:XXX 性别:X 年龄:XX 班级:XXX,将该信息读出后显示的屏幕上后把文件删除。

20. 用缓冲字节流实现文件复制的功能

  1. 首先判断d盘是否存在a.txt文件。
  2. 若不存在则创建a.txt文件,然后把a.txt文件复制成acopy.txt

21. 通过Io流实现MP3文件创建和复印功能

  1. 判断d:/歌曲.mp3文件是否存在
  2. 若不存在则创建d:/歌曲.mp3文件,创建完成后复制到 e:/歌曲.mp3

22. 用(字节流)读取一张图片,读进来之后再输出到另一个文件中。

23. (字符流)读取一个文本文件,每行都追加一个“好”,在文件结尾再追加“完毕”。

24. 使用Java的输入、输出流将一个文本文件的内容按行读出,每读出一行就顺序添加行号,并写入到另一个文件中。

25. 使用RandomAccessFile流将一个文本文件倒置读出。

26. 使用ObjectInputStream类和ObjectOutputStream类有哪些注意事项?。

27. 用缓冲字符流读入一个文件中的内容,并把内容输出到一个新的文件中。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值