课程  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. 四边形优化dp

    理解: http://blog.renren.com/share/263498909/1064362501 http://www.cnblogs.com/ronaflx/archive/2011/03 ...

  2. Furure的简单介绍和使用

    引子:

  3. 使用标准模板find函数来对结构体容器进行查找

    最近在写一个项目,项目中需要获得类下面的所有对象,所以我采用了map容器,以string为关键字,list容器为内容来进行查找,而list中是一些struct结构体.由于在插入操作的时候需要判断该对象 ...

  4. VueJS如何引入css或者less文件的一些坑

    我们在做Vue+webpack的时,难免会引入各种公共css样式文件,那么我们改如何引入呢?引入时会有那些坑呢? 首先,引入公共样式时,我们在“main.js”里使用AMD的方式引入,即 requir ...

  5. Win Socket编程原理及简单实例

    [转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...

  6. idea 创建 简单的scala maven项目

    1.创建maven scala项目 2.maven配置 <properties> <scala.version>2.11.8</scala.version> < ...

  7. Android -- ImageLoader简析

    图片的内存缓存实现 Image-Loader库有一个较完整的内存缓存实现,使用者可以根据需要选择已经实现的策略,也可以定制自己项目中需要的策略. 内存缓存实现代码在memory和memory.impl ...

  8. [置顶] ios 无限循环翻页源码例子

    原创文章,转载请注明出处:http://blog.csdn.net/donny_zhang/article/details/9923053 demo功能:ios 无限循环翻页源码例子.iphone 6 ...

  9. windows CMD命令查看局域网内所有主机名及IP

    COLOR 0A CLS @ECHOOff Title查询局域网内在线电脑IP :send @ECHO off&setlocal enabledelayedexpansion ECHO 正在获 ...

  10. 如何将xml转为python中的字典

    如何将xml转为python中的字典 import cElementTree as ElementTree class XmlListConfig(list): def __init__(self, ...