java基础之IO字符流练习题

发布时间:2024-01-13 18:38:43

文件字节输入/输出流

对象序列化

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.仔细阅读以下代码,关于程序描述正确的是()

?

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:编程:根据提示完成以下代码

?

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

??

利用字节流+桥转换读入这个文本文件,按照行的顺序,以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);
????????}
????}
}

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

文章来源:https://blog.csdn.net/zhzjn/article/details/135572985
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。