课程  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. Python3.6学习笔记(三)

    面向对象编程 面向对象编程 Object Oriented Programming 简称 OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程 ...

  2. 矩阵求和及Kadane算法

    今天的一道题目: https://leetcode.com/problems/max-sum-of-sub-matrix-no-larger-than-k/ 有难度.这一类题目很有代表性. 搜到这个网 ...

  3. 第三章 类文件结构与javap的使用

    注:本文主要参考自<深入理解java虚拟机(第二版)> 1.javap的使用与类文件结构 使用过程: java源代码: package compile; /** * class字节码 */ ...

  4. Loadrunner视频教程汇总

    小布老师视频:测试工具概述,兼LoadRunner介绍 -1-4http://www.boobooke.com/v/bbk1046http://www.boobooke.com/v/bbk1046.z ...

  5. Spring boot基础:配置文件配置变量、多环境的配置

    一.配置 resources下面application.properties 1.普通配置 resources下面application.properties,比如写上:server.port=909 ...

  6. IOS调试—断点调试以及动态输出

    在开发App的过程中,需要反复的修改和优化我们的代码,特别是当程序出现bug,需要快速的找出错误的原因,进行修改,以保证程序的正确执行. 断点调试,是最常用最简单的一种调试方式,可以一步步跟踪程序执行 ...

  7. (LeetCode 189)Rotate Array

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...

  8. Android 之 Android目录

    Android的目录结构如图所示: 下面来分别说说各个目录: 1.src:存放应用程序中所有的(后台)源代码,代码的源文件一般存放在相应的包下面. 2.gen:该目录下一般有BuildConfig.j ...

  9. (C++)UrlEncode的标准实现

    http://blog.163.com/xiaopengyan_109/blog/static/149832173201072685539394/ 地址栏传中文参数后是什么编码格式 网页中的表单使用P ...

  10. 【CSS】瀑布流布局的两种方式:传统多列浮动和绝对定位布局

    传统多列浮动 各列固定宽度,并且左浮动: 一列中的数据块为一组,列中的每个数据块依次排列即可: 更多数据加载时,需要分别插入到不同的列上: 优点: (1)布局简单,应该说没啥特别的难点: (2)不用明 ...