java基础之IO字符流练习题

文件字节输入/输出流

对象序列化

BufferedReader/PrintWriter

桥转换流

1:Java 中字节流的父类为 InputStream  OutputStream;字符流的父类为 Reader Writer。以上 4 个类都位于 java.io包中。

2:对象序列化:

(1)为了让某对象能够被序列化,要求其实现 serializable 接口;

(2)为了让该对象某个属性不参与序列化,应当使用 transient修饰符。

3.以下描述正确的是()      

  1. InputStream 和OutputStream 是基于字节流的
  2. Reader 和Writer 是基于字符流的
  3. Reader 和Writer 是支持对象序列化的
  4. PrintWriter 是支持对象序列化的

4.创建一个BufferedOutputStream 的语句为()

  1. new BufferedOutputStream(“out.txt”);
  2. new BufferedOutputStream(new OutputStream(“out.txt”));
  3. new BufferedOutputStream(new FileOutputStream(“out.txt”));
  4. new BufferedOutputStream(new FileInputStream(“out.txt”));

5.仔细阅读以下代码,关于程序描述正确的是()

java基础之IO字符流练习题_第1张图片
 

A. 该程序编译出错 B. 正常运行异常

C. 编译正常,运行时也正常 D. 以上描述都不正确

6:对象序列化和字符流)在PrintWriter 中,有一个方法 print(Object obj) ; 在ObjectOutputStream 中,有一个方法 writeObject(Object obj)

请简述这两个方法的区别

writeObject(Object obj)存放到文本中是以对象形式的,输出的也是对象    所以该方法调用的对象必须实现序列化接口   implements   Serializable    以此表明是可读的

对象过滤流是在读写对象的完整信息,所以可以对对象进行序列号及反序列化

而Print Writer中print(Object obj)方法是调用了对象中的toString()方法把对象变为了字符串,存入到文本中去,所以该方法引用的对象可以不用序列化 不用implements  Serializable接口

print()只是在读写对象引用的toString方法的结果,并未读写对象的完整信息,所以无法对对象进行序列号及反序列化

7:(字符流、桥转换)要想从某个文件中获得一个字符输出流,则至少有以下三种方式:

(1)利用FileWriter 类

(2)利用PrintWriter 类

(3)利用FileOutputStream 类,并通过OutputStreamWriter 类获得 Writer 请简述以上三种方式获得Writer 的区别。

(1)利用Filewriter 节点字符流,可以获取文本元素,但是比较后两种来说相对较慢

(2)利用PrintWriter 过滤字符流    可以再File Writer基础上增加一个缓冲区,可以有效提高运行速

(3)利用FileOutputStream 节点字节流   先创建  再用Output Stream Writer 桥转换流  可以实现字符集的转换,这是前两个流所没有的功能

8:(字节过滤流)利用 Object流,完成下面操作:

(1)往当前目录下“test.dat”的文件中写入一个long类型的数值:10000L

(2)从该文件中读出数值,并把该数值加 1 之后,再存回文件中。

package com.by.homeworkIO2;

import java.io.*;

public class Test9 {
    public static void main(String[] args) {

        try(  ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("file/test.txt",true));
              ObjectInputStream ois=new ObjectInputStream(new FileInputStream("file/test.txt"));){
            oos.writeLong(10000L);
            oos.flush();
            long l=0;
            /*while(true){
                try {
                     l= (long) ois.readObject();
                    System.out.println(l+1);
                } catch (EOFException e) {
                    break;
                }

            }*/
            oos.writeLong(ois.readLong()+1);
            System.out.println(ois.readLong());

        }catch (FileNotFoundException e){
            System.out.println("文件路径有误");
        }catch (IOException e){
            System.out.println("读写有误");
        } catch (Exception e) {
            System.out.println("位置错误");
        }
    }
}

9:编程:根据提示完成以下代码

java基础之IO字符流练习题_第2张图片

 

package com.by.homeworkIO2;

import javax.swing.plaf.basic.BasicDesktopIconUI;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;

public class Test10 {
    public static void main(String[] args) throws IOException {
        File f=new File("file/hello.txt");
        System.out.println(f.exists());
        if (f.exists()){
            System.out.println(f.getPath());
            System.out.println(f.getAbsolutePath());
            System.out.println(f.getCanonicalPath());
        }
        System.out.println(f.isFile());
    }
}

10:(字符流、桥转换)完成下面功能:

事先在当前目录下准备好一个 test.txt 的文本文件,要求该文本文件是使用 GBK 编码的多行文本文件。如test.txt :

package com.by.homeworkIO2;

import java.io.*;

public class Test11GBK {
    public static void main(String[] args) {

        try (OutputStream os=new FileOutputStream("file/test1.txt");
             InputStream is=new FileInputStream("file/test1.txt");
             OutputStreamWriter osw=new OutputStreamWriter(os,"GBK");
             InputStreamReader isr=new InputStreamReader(is,"GBK");
             PrintWriter pw=new PrintWriter(osw);
             BufferedReader br=new BufferedReader(isr);){
            pw.println("床前明月光");
            pw.println("疑似地上霜");
            pw.println("举头望明月");
            pw.println("低头思故乡");
            pw.flush();
            while(true){
                String str=br.readLine();
                if (str==null){
                    break;
                }
                System.out.println(str);
            }
        }catch (FileNotFoundException e){
            System.out.println("文件路径有误");
        }catch (IOException e){
            System.out.println("读写有误");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

  

java基础之IO字符流练习题_第3张图片

利用字节流+桥转换读入这个文本文件,按照行的顺序,以UTF-8 编码方式,写到 test2.txt 文件中。例 :test2.txt :

package com.by.homeworkIO2;

import java.io.*;

public class Test11GBK {
    public static void main(String[] args) {

        try (OutputStream os=new FileOutputStream("file/test1.txt");
             InputStream is=new FileInputStream("file/test1.txt");
             OutputStreamWriter osw=new OutputStreamWriter(os,"UTF-8");
             InputStreamReader isr=new InputStreamReader(is,"UTF-8");
             PrintWriter pw=new PrintWriter(osw);
             BufferedReader br=new BufferedReader(isr);){
            pw.println("床前明月光");
            pw.println("疑似地上霜");
            pw.println("举头望明月");
            pw.println("低头思故乡");
            pw.flush();
            while(true){
                String str=br.readLine();
                if (str==null){
                    break;
                }
                System.out.println(str);
            }
        }catch (FileNotFoundException e){
            System.out.println("文件路径有误");
        }catch (IOException e){
            System.out.println("读写有误");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
java基础之IO字符流练习题_第4张图片

11:编程:根据描述完成以下程序:

在当前目录下创建一个 worldcup.txt 的文本文件,其格式如下:

该文件采用“年份/世界杯冠军”的方式保存每一年世界杯冠军的信息。

要求:读入该文件的基础上,让用户输入一个年份,输出该年的世界杯冠军。如果该年没有举办世界杯, 则输出“没有举办世界杯”

package com.by.homeworkIO2;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Test12WorldCup {
    public static void main(String[] args) {
        try (
                //创建输入流读取数据
                BufferedReader br = new BufferedReader(new FileReader("file/worldcup.txt"))
        ) { //获取用户输入
            Scanner scanner =new Scanner(System.in);
            System.out.println("请输入年份:");
            String year = scanner.next();
            //读取文件内容并比较
            boolean flag=false;
            while (true){
                String line = br.readLine();
                if (line==null)break;
                String[] strs = line.split("/");
                if (strs[0].equals(year)){
                    flag=true;
                    System.out.println(strs[1]);
                }
            }
            if (!flag){
                System.out.println("没有举办世界杯");
            }
        } catch (FileNotFoundException e) {
            System.out.println("文件找不到");
        } catch (IOException e) {
            System.out.println("IO异常");
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("未知异常");
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(java,java,开发语言)