课程  Java面向对象程序设计

一、实验目的

掌握数据流的使用

二、实验环境

1、微型计算机一台

2、WINDOWS操作系统,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)程序设计的具体代码如下:

packageIntegerSort;importjava.io.ByteArrayInputStream;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.Scanner;importjava.util.Arrays;public classIntegerSortTest {/***@paramargs*/
public static voidmain(String[] args) {
System.out.println("-------------用Scanner类,从键盘上输入10个整数,排序后,存入文件中,再读取显示于屏幕上-------------");
Scanner s=newScanner(System.in);
System.out.println(">>>请您输入10个整数<<
System.out.print(" 请您输入第"+(i+1)+"个整数:");
arr[i]=s.nextInt();
}
System.out.println(">>>您输入的10个整数排序前为:<<
System.out.print(arr[i]+" ");
}
Arrays.sort(arr);//按升序对数组arr进行排序(Arrays类的sort()方法是用来对数组进行升序排列的方法)
System.out.println("\n>>>排序后为:<<
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)调试程序,运行结果如下所示:

java 软件功能设计_java 软件功能设计

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

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

java 软件功能设计_System_02

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)程序设计的具体代码如下:

packageEncryption;import java.util.*;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.security.PublicKey;public classEncryptionTest1 {public static voidmain(String[] args) {try{
Encrypt();//加密
Decrypt();//解密
}catch(Exception e) {
e.printStackTrace();
}
}//将文件f1.txt的内容加密后,存入f2.txt中
private static void Encrypt() throwsException{
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=newFileInputStream(f1);
BufferedInputStream bis=newBufferedInputStream(fin);
FileOutputStream fout=new FileOutputStream(new File("D:\\IOTest\\Encryption\\f2.txt"));
BufferedOutputStream bos=newBufferedOutputStream(fout);intb;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() throwsException{
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=newBufferedInputStream(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(newString(buffer));
}
bis.close();
}
}class Encrypt{//这是一个加密类,包含加密(Encrypt)、解密(Decrypt)方法。
public static byte Encrypt(byteb) {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{returnb;
}
}public static byte Decrypt(byteb){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{returnb;
}
}
}

其中文件f1.txt内容为:

java 软件功能设计_System_03

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

java 软件功能设计_java 软件功能设计_04

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

java 软件功能设计_数组_05

五、实验总结

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

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