Java程序设计实验五 输入输出流

[1]实验目的:理解文件和流的概念、Java流的层次结构,掌握Java提供的各种字节流类和字符流类的功能和使用方法。 

[2]实验内容

1、编写一个Java应用程序,将已存在的扩展名为.txt的文本文件加密后存入另一个文本文件中。按模板要求,将【代码1】~【代码7】替换为Java程序代码。

import java.io.*;
class SecretExample
{
    public static void main(String a[])
    {
        File fileone=new File("hello.txt");
        File filetwo=new File("hello.secret");
       char b[]=new char[100];
        try{
              FileReader in =【代码1】 //创建指向fileone的字符输入流
              FileWriter out =【代码2】 //创建指向fileontwo的字符输出流
              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】 //创建指向fileontwo的字符输入流
              System.out.println("加密后的文件内容:");
              n=in.read(b);
              while ( n != -1 )
              {
                   String str=new String(b,0,n);	
                   System.out.println("dfjakfjd"+str);
                   n=in.read(b);
              }
             in=new FileReader(filetwo);
             System.out.println("解密后的文件内容:");
             while ( (n=in.read(b)) != -1 )
             {
                  for (int i=0; i<n;i++)
                  {  b[i]=(char)(b[i]^'a');  }
                     String str=new String(b,0,n);
                     System.out.println(str);
                  }
              【代码6】    // in关闭
             }
             catch(IOException e)
             {
                   System.out.println(e);
             }
     }     
}
package experiment5;

import java.io.*;

class SecretExample {
    File file_one=new File("hello.txt");
    File file_two=new File("hello.secret");
    public void func()
    {
        char[] code =new char[100];
        try {
            FileReader in=new FileReader(file_one);//【代码1】创建指向file_one的字符输入流
            FileWriter out=new FileWriter(file_two);//【代码2】创建指向file_two的字符输出流
            int n;
            if((n=in.read(code))!=-1)
            {
                for(int i=0;i<n;i++)
                {
                    code[i]=(char)(code[i]^1);//异或运算
                }
                out.write(code,0,n);//【代码3】out 将数组 b 的前 n 单元写到文件
            }
            out.close();//【代码 4】out 关闭
            in=new FileReader(file_two);//【代码5】创建指向file_two的字符输入流
            System.out.println("加密后的文件内容:");
            n=in.read(code);
            if(n!=-1)
            {
                String str=new String(code,0,n);
                System.out.println("dfjakfjd "+str);
            }
            in=new FileReader(file_two);
            System.out.println("解密后的文件内容:");
            if((n=in.read(code))!=-1)
            {
                for(int i=0;i<n;i++)
                {
                    code[i]=(char)(code[i]^1);
                }
                String str=new String(code,0,n);
                System.out.println(str);
            }
            in.close();//【代码 6】in 关闭
        }
        catch(IOException e)
        {
            System.out.println(e);
        }
    }
}

public class Exp5_1 {
    public static void main(String[] args){
        SecretExample secretExample = new SecretExample();
        secretExample.func();
    }
}

 

 hello.txt

 

 hello.secret

 

 

2、编程完成下列功能:

1)首先建立两个文件myfiel.txt和myfile2.txt。

2)从标准设备中输入多名学生信息,如学号,姓名,专业,班级,家庭住址等,待输入"bye"时结束,将输入内容保存在myfile1.txt文件中。

3)再将myfile1.txt文件中内容拷贝到myfile2.txt。 

package experiment5;

import java.io.*;
import java.util.Objects;
import java.util.Scanner;

//声明实现接口Serializable,实现序列化
class Student implements Serializable{
    private final String stu_id;
    private final String name;
    private final String major;
    private final String squad;
    private final String address;
    Student(String stu_id, String name,String major, String squad, String address){
        this.stu_id = stu_id;
        this.name = name;
        this.major = major;
        this.squad = squad;
        this.address = address;
    }
    public Student(Student s){
        this(s.stu_id,s.name, s.major, s.squad,s.squad);
    }
    @Override
    public String toString(){
        return "学号:"+this.stu_id + "\t姓名:"+this.name + "\t专业:" + this.major + "\t班级:" + this.squad + "\t地址:" + this.address;
    }
}
public class Exp5_2 {
    public static void main(String[] args) throws IOException {
        String stu_id, name, major, squad, address;
        FileOutputStream fileOutputStream1 = new FileOutputStream("myfile1.txt");
        ObjectOutputStream objectOutputStream1 = new ObjectOutputStream(fileOutputStream1);




        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生学号,姓名,专业,班级和地址,输入”bye“结束(至多999人)。");
        while(true){
            stu_id = scanner.next();
            if(Objects.equals(stu_id, "bye")) break;
            name = scanner.next();
            major = scanner.next();
            squad = scanner.next();
            address = scanner.next();
            Student student = new Student(stu_id, name, major, squad, address);
            objectOutputStream1.writeObject(student);
        }
        objectOutputStream1.close();
        fileOutputStream1.close();

        FileInputStream fileInputStream1 = new FileInputStream("myfile1.txt");
        ObjectInputStream objectInputStream1 = new ObjectInputStream(fileInputStream1);

        FileOutputStream fileOutputStream2 = new FileOutputStream("myfile2.txt");
        ObjectOutputStream objectOutputStream2 = new ObjectOutputStream(fileOutputStream2);

        FileInputStream fileInputStream2 = new FileInputStream("myfile2.txt");
        ObjectInputStream objectInputStream2 = new ObjectInputStream(fileInputStream2);
        System.out.println("myfile1.txt中的学生信息:");
        while(true){
            try{
                Student s = (Student) objectInputStream1.readObject();
                System.out.println(s.toString());
                Student ss = new Student(s);
                objectOutputStream2.writeObject(ss);
            }catch (EOFException | ClassNotFoundException e){break;}
        }

         objectInputStream1.close();
         fileInputStream1.close();
         objectOutputStream2.close();
         fileOutputStream2.close();
         System.out.println("myfile2.txt中的学生信息:");
         while (true){
             try{
                 System.out.println(objectInputStream2.readObject());
             }catch (EOFException | ClassNotFoundException e){break;}
         }
         objectInputStream2.close();
         fileInputStream2.close();
    }
}

 myfile1.txt

myfile2.txt

 

[3]实验分析

通过本次实验,熟悉了Java中文件和流的概念,掌握了流的使用方法。

在第一题中只涉及到字符串的操作,所以采用字符输入/输出流更为简单。

在第二题中,涉及到对对象的读和写,所以我采用文件输入/输出字节流,和对象字节流操作文件,每次以对象为单位读写,这样更为方便。将每一个Student对象转换成字节流写入文件。这样,每一个对象都要经过序列化转换为字节流,从字节流中重建的时候也有经过反序列化。

这样带来一个问题,在生成的文件里面,并不显示键盘输入的字符,而是序列化后的对象,所以显示为乱码

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实验Java 语言基础 1 一. 实验目的 1 二.实验内容 1 三.源程序代码 1 四.实验结果截图 6 .结果分析 7 实验二 面向对象程序设计 8 一.实验目的 8 二.实验内容 8 三.源程序代码 8 四.实验结果截图 12 .结果分析 13 实验三、异常处理程序设计 14 一.实验目的 14 二.实验内容 14 三.源程序代码 14 四.实验结果 17 .结果分析 18 实验四 图形用户界面程序设计 19 一.实验目的 19 二.实验内容: 19 三.源程序代码(核心代码) 19 四.程序设计思路 23 实验结果及分析 23 六.不足之处 26 实验 多线程程序设计 27 一.实验目的 27 二.实验内容 27 三.源程序代码 27 四.实验结果截图 29 .结果分析 30 实验输入输出流 31 一.实验目的 31 二.实验内容: 31 三.源程序代码 31 四.实验结果截图 36 .结果分析 37 实验七 使用 TCP 协议的 Socket 网络程序设计 38 一.实验目的 38 二.实验内容 38 三.核心源代码 39 四.实验结果截图 43 .结果分析 45 实验八 数据库应用 46 一.实验目的 46 二.实验内容 46 三.源程序代码 46 四.实验结果截图 48 .结果分析 48 附录一:学生信息管理(针对实验四文件操作的改进) 49 一. 目前界面 49 二. 改进展示 50 三. 部分代码 53 四. 总结 54 附录二:多对多聊天室(实验七扩展) 55 一. 思路 55 二. 核心代码 55 三. 截屏展示 58 四. 实验分析 60

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ace2NoU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值