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

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)程序设计思路如下:

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.通过本次实验,加深了我对文件与数据流知识的掌握,对文件的读写操作有了进一步的理解。

Java I/O 应用程序设计的更多相关文章

  1. 20175212童皓桢 Java实验二-面向对象程序设计实验报告

    20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...

  2. 20165324 Java实验四 Android程序设计

    20165324 Java实验四 Android程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年5月1 ...

  3. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  4. [Effective Java]第八章 通用程序设计

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. Effective java笔记5--通用程序设计

    一.将局部变量的作用域最小化      本条目与前面(使类和成员的可访问能力最小化)本质上是类似的.将局部变量的作用域最小化,可以增加代码的可读性和可维护性,并降低出错的可能性. 使一个局部变量的作用 ...

  6. #20165323 Java实验四 Android程序设计

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:13:45 - 15:25 实验序号:实验 ...

  7. java语言实现对程序设计语言源文件统计字符数、单词数、行数及其他拓展功。

    本次作业Github项目地址:https://github.com/YiChenglong2018/WordCount 一.项目简介 本项目的需求可以概括为:对程序设计语言源文件统计字符数.单词数.行 ...

  8. Java练习 SDUT-1140_面向对象程序设计上机练习一(函数重载)

    面向对象程序设计上机练习一(函数重载) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 利用数组和函数重载求5个数最大值 ...

  9. Java入门之基础程序设计

    1.Java语言特点了解 1. java语言:   有些语言提供了可移植性.垃圾收集等机制,但是没有提供一个大型的库.如果想要有酷炫的绘图功能.网络连接功能或者数据库存取功能,就必须动手编写代码.Ja ...

随机推荐

  1. linux下so获得自己文件位置的路径

    打开这个设备/proc/self/maps 返回的就是这个进程当前使用的so列表 cat /proc/self/maps00400000-0040b000 r-xp 00000000 08:01 14 ...

  2. UT-Austin大学在Image search and large-scale retrieval方面的一系列papers

    WhittleSearch: Interactive Image Search with Relative Attribute Feedback.  A. Kovashka, D. Parikh, a ...

  3. iOS:UIToolBar、toolbarItems、BarButtonItem的几种关系

    工具栏:ToolBar 工具栏项目:Bar Button Item 调节按钮位置的固定调节:Fixed Space Bar Button Item 调节按钮位置的灵活调节:Flexible Space ...

  4. guess-number-higher-or-lower-ii

    // https://discuss.leetcode.com/topic/51353/simple-dp-solution-with-explanation // https://en.wikipe ...

  5. ubuntu 12.04 安装无线网卡驱动

    安装ubuntu 12.04后,无线网卡不可用,采用以下方式解决: 1.在终端中运行如下命令,重新安装b43相关的全部驱动和firmware: sudo apt-get install bcmwl-k ...

  6. UVA 12487 Midnight Cowboy(LCA+大YY)(好题)

    题目pdf:http://acm.bnu.edu.cn/v3/external/124/12487.pdf 大致题意: 一棵树,一个人从A节点出发,等可能的选不论什么一条边走,有两个节点B,C求这个人 ...

  7. 部署项目Nginx+Tornado+Supervisor

    http://www.jianshu.com/p/9bebb99368ea Tornado Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻 ...

  8. DB2数据源在Spring环境中的配置

    简单记录一下,以备不时之需. DB2的java驱动包可以在这里下载:http://pan.baidu.com/s/1gOoEJ DB2数据源的配置如下,粗体字部分是需要根据实际情况修改的: <b ...

  9. Android开发之对话框高级应用

    Android开发之对话框高级应用 创建并显示一个对话框非常easy.可是假设想进行一些更高级点的操作,就须要一些技巧了.以下将和大家分享一下对话框使用的一些高级技巧. 1.改变对话框的显示位置: 大 ...

  10. 连接SDE空间数据库——SQL Server篇

    一.软件配置 要从 ArcMap 连接至 SQL Server 中的数据库或地理数据库,请在 ArcMap 计算机上安装 SQL Server native client 或 Microsoft OD ...