课程  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. style="visibility: hidden"和 style=“display:none”之间的区别

    style=“display:none” 隐藏页面元素: <html> <head> <script type="text/javascript"&g ...

  2. 5.synchronized锁重入

    package demo1; /** * synchronized锁重入 * Created by liudan on 2017/6/5. */ public class MyThread5_sync ...

  3. OBjective-C:在可变数组NSMutableArray中添加相同对象后,进行自定义的排序方式输出

    以下为自定义的排序方式的实现 #import "Person+Compare.h" @implementation Person (Compare) -(NSComparisonR ...

  4. LZO 使用和介绍

    LZO说明 摘要 LZO 是一个用 ANSI C 语言编写的无损压缩库.他能够提供非常快速的压缩和解压功能.解压并不需要内存的支持.即使使用非常大的压缩比例进行缓慢压缩出的数据,依然能够非常快速的解压 ...

  5. oralce sql 分页

    create table student ( sid varchar2(10), --学号 sname varchar2(10), --姓名 classid varchar2(10), --班级号 s ...

  6. IOS实现多媒体音频之音乐播放器

    随着智能手机市场越来越活跃,相应的app也变得五彩缤纷,各式各样,让你的app更吸引人多媒体技术不可避免.通过对音频和视频等控制让你的app更加丰富多彩,今天和大家一起研究下基本的音频使用.本文只提供 ...

  7. java代码在开始事务后,先做了一个查询,再insert,此时会报: java.sql.SQLException: could not retrieve transation read-only status server

    解决过程: 查看mysql的事物隔离级别 SHOW VARIABLES LIKE '%iso%'; 返回结果: REPEATABLE-READ 把这个改成:READ-COMMITTED 就好了: SE ...

  8. mybatis如何根据mapper接口生成其实现类(springboot)

    序 mybatis里头给sqlSession指定执行哪条sql的时候,有两种方式,一种是写mapper的xml的namespace+statementId,如下: public Student fin ...

  9. 向第一个 p 元素添加一个类

    This is a heading This is a paragraph. This is another paragraph. 向第一个 p 元素添加一个类 111 <html> &l ...

  10. ab测试工具参数详解

    -n 测试会话中所执行的请求个数,默认仅执行一个请求 -c 一次产生的请求个数,即同一时间发出多少个请求,默认为一次一个 -t 测试所进行的最大秒数,默认为无时间限制....其内部隐含值是[-n 50 ...