• Java I/O 应用程序设计


    课程  Java面向对象程序设计

    一、实验目的

    掌握数据流的使用

    二、实验环境

    1微型计算机一台 

    2WINDOWS操作系统,Java SDK,Eclipse开发环境

    三、实验内容 

    1、使用Scanner类,实现从键盘上输入10个整数,然后将整数排序后,存入文件中,再从文件中读取出来,显示在屏幕上。

    2、将文件f1.txt的内容加密后,存入f2.txt中,读取f2.txt,并显示解密后的内容。

    四、实验步骤和结果

    1、使用Scanner类,实现从键盘上输入10个整数,然后将整数排序后,存入文件中,再从文件中读取出来,显示在屏幕上。

    (1)程序设计思路如下:

     a.使用Scanner类,通过命令提示从键盘上输入10个整数,存入一个数组arr中。

    ‚ b.使用java.util.Arrays类的sort()方法来对数组进行升序排列。

     c.使用DataOutputStream 创建连接到指定文件

    (D:\IOTest\shenxiaolinIOApp.dat)的数据输出流对象,并将排序后的数组存入文件中。

     d.使用DataIntputStream 读取文件内容,并将内容显示在屏幕上。

    (2)程序设计的具体代码如下:

    package IntegerSort;
    
    import java.io.ByteArrayInputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Scanner;
    import java.util.Arrays;
    public class IntegerSortTest {
        /** * @param args*/
        public static void main(String[] args) {
            System.out.println("-------------用Scanner类,从键盘上输入10个整数,排序后,存入文件中,再读取显示于屏幕上-------------");
            Scanner s=new Scanner(System.in);
            System.out.println(">>>请您输入10个整数<<<");
            int[] arr=new int [10];
            for (int i = 0; i<arr.length; i++) {
                    System.out.print("   请您输入第"+(i+1)+"个整数:");
                    arr[i]=s.nextInt();
                }
            System.out.println(">>>您输入的10个整数排序前为:<<<");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+"  ");
            }
            Arrays.sort(arr);//按升序对数组arr进行排序(Arrays类的sort()方法是用来对数组进行升序排列的方法)
            System.out.println("
    >>>排序后为:<<<");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+"  ");
            }
            DataOutputStream dos=null;
            DataInputStream  dis=null;
             try {
                 //创建连接到指定文件的数据输出流对象
                 dos=new DataOutputStream(new FileOutputStream("D:\IOTest\shenxiaolinIOApp.dat"));
                 for (int i = 0; i < arr.length; i++) {
                     dos.writeInt(arr[i]);
                 }
                 System.out.println("
    
    >>>以上10个排序后的整数已成功写入文件‘shenxiaolinIOApp.dat’中!<<<");
                 
                 //从文件读出到屏幕上
                 System.out.println("
    >>>从文件中读取出来如下所示:<<<");
                 
                 dis=new DataInputStream(new FileInputStream("D:\IOTest\shenxiaolinIOApp.dat"));
                 for (int i = 0; i < arr.length; i++) {
                    arr[i]=dis.readInt();
                     System.out.print(arr[i]+"  ");
                }
             } catch (FileNotFoundException e) {
                 e.printStackTrace();
             }catch (IOException e) {
                e.printStackTrace();
            }finally{
                 //关闭流对象
                 try {
                     if (null!=dos) {
                         dos.close();//关闭过滤流时,会自动关闭它包装的底层节点流
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
                 try {
                    if (dis!=null) {
                        dis.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
             }               
        }
    }

     (3)调试程序,运行结果如下所示:

     

      其中,文件D:\IOTest\shenxiaolinIOApp.dat 的内容如下:

    (因为DataInputStream和DataOutputStream采用的是字节流方式,所以写入和读取的文件是二进制文件,使用记事本打开乱码属于正常现象)

     

     

      2、将文件f1.txt的内容加密后,存入f2.txt中,读取f2.txt,并显示解密后的内容。

    (1)程序设计思路如下:

     a.在D:\IOTest\Encryption\f1.txt目录下创建文件并在f1.txt写入内容。

     b.编写加密程序为f1.txt文件内容进行加密并存入同目录下的f2.txt中。

     c.编写程序读取f2.txt,同时进行解密,并把解密内容显示在控制台上。

    (2)程序设计的具体代码如下:

    package Encryption;
    import java.util.*;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.security.PublicKey;
    
    public class EncryptionTest1 {
    
        public static void main(String[] args) {
            try {
                Encrypt();//加密
                Decrypt();//解密
                        
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //将文件f1.txt的内容加密后,存入f2.txt中
        private static void Encrypt()  throws Exception{
            File f1=new File("D:\IOTest\Encryption\f1.txt");
            File f2=new File("f2.txt");
            //这名话并不真正会创建*.txt 这个文件,而是创建了一个代表*.txt 
            //这个文件的一个File对象, 你需要判断,如果文件不存在,再创建
            if (!f1.exists()) {
                System.out.println("f1.txt 文件不存在!");
                return;
            }
            if (!f2.exists()) {
                f2.createNewFile();
            }
            FileInputStream fin=new FileInputStream(f1);
            BufferedInputStream bis=new BufferedInputStream(fin);
            
            FileOutputStream fout=new FileOutputStream(new File("D:\IOTest\Encryption\f2.txt"));
            BufferedOutputStream bos=new BufferedOutputStream(fout);
            int b;
            while ((b=bis.read())!=-1) {
                bos.write(Encrypt.Encrypt((byte)b));
            }
            bos.close();
            bis.close();
            System.out.println(">>>文件D:\IOTest\Encryption\f1.txt的内容已加密,并成功存入D:\IOTest\Encryption\f2.txt中!");
        }
        //读取f2.txt,并在控制台上显示解密后的内容。
        private static void Decrypt() throws Exception{
            File file=new File("f2.txt");
            if (!file.exists()) {
                System.out.println("f2.txt 文件不存在!");
                return;
            }
            
            FileInputStream fin=new FileInputStream("D:\IOTest\Encryption\f2.txt");
            BufferedInputStream bis=new BufferedInputStream(fin);
            System.out.println(">>>读取加密文件f2.txt后的解密内容为如下:");
            byte[] buffer=new byte[2];
            while (bis.read(buffer)>0) {
                buffer[0]=Encrypt.Decrypt(buffer[0]);
                buffer[1]=Encrypt.Decrypt(buffer[1]);
                System.out.print(new String(buffer));
            }
            bis.close();
        }
    }
    
    class Encrypt{//这是一个加密类,包含加密(Encrypt)、解密(Decrypt)方法。
        public static byte  Encrypt(byte b) {
            if ((b>=65 && b<=88)||(b>=97 && b<=120)) {
                return (byte)(b+2);
            }else if((b>=89 && b<=90)||(b>=121 && b<=122)){
                return (byte)(b-24);
            }else {
                return b;
            }
        }
        
        public static byte Decrypt(byte b){
            if ((b>=67 && b<=90)||(b>=99 && b<=122)) {
                return (byte)(b-2);
            }else if((b>=65 && b<=66)||(b>=97 && b<=98)){
                return (byte)(b+24);
            }else {
                return b;
            }
        }
    }

     其中文件f1.txt内容为:

     

    (3)调试程序,运行代码,结果如下截图所示:

     

         f1.txt加密后的内容写入f2.txt为:

    五、实验总结

      1.本次实验按时按量完成。

      2.通过本次实验,加深了我对文件与数据流知识的掌握,对文件的读写操作有了进一步的理解。

     

     

  • 相关阅读:
    python爬虫常见面试题(二)
    python爬虫常见面试题(一)
    回首2018,展望2019
    PDF编辑软件PDFGuru
    打字机NoisyTyper
    文本标注系统
    logstash配置
    服务器上安装python3
    scrapy自调度方案
    前端项目配置nginx配置
  • 原文地址:https://www.cnblogs.com/shenxiaolin/p/5040304.html
Copyright © 2020-2023  润新知