课程 Java面向对象程序设计 实验名称 Java I/O 应用程序设计 第 页
班级 2013级计三班
一、实验目的
掌握数据流的使用
二、实验环境
1、微型计算机一台
2、WINDOWS操作系统,Java SDK,Eclipse开发环境
三、实验内容
1、使用Scanner类,实现从键盘上输入10个整数,然后将整数排序后,存入文件中,再从文件中读取出来,显示在屏幕上。
2、将文件f1.txt的内容加密后,存入f2.txt中,读取f2.txt,并显示解密后的内容。
四、实验步骤和结果
1、使用Scanner类,实现从键盘上输入10个整数,然后将整数排序后,存入文件中,再从文件中读取出来,显示在屏幕上。
(1)程序设计思路如下:
①使用Scanner类,通过命令提示从键盘上输入10个整数,存入一个数组arr中。
‚使用java.util.Arrays类的sort()方法来对数组进行升序排列。
ƒ使用DataOutputStream 创建连接到指定文件
(D:\\IOTest\\shenxiaolinIOApp.dat)的数据输出流对象,并将排序后的数组存入文件中。
④使用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("\n>>>排序后为:<<<"); 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("\n\n>>>以上10个排序后的整数已成功写入文件‘shenxiaolinIOApp.dat’中!<<<"); //从文件读出到屏幕上 System.out.println("\n>>>从文件中读取出来如下所示:<<<"); 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)程序设计思路如下:
①在D:\\IOTest\\Encryption\\f1.txt目录下创建文件并在f1.txt写入内容。
‚编写加密程序为f1.txt文件内容进行加密并存入同目录下的f2.txt中。
ƒ编写程序读取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.通过本次实验,加深了我对文件与数据流知识的掌握,对文件的读写操作有了进一步的理解。