Java I/O 应用程序设计

课程  Java面向对象程序设计  实验名称      Java I/O 应用程序设计   第        页

班级  2013级计三班

一、实验目的

掌握数据流的使用

二、实验环境

1、微型计算机一台

2、WINDOWS操作系统,Java SDK,Eclipse开发环境

三、实验内容

1、使用Scanner类,实现从键盘上输入10个整数,然后将整数排序后,存入文件中,再从文件中读取出来,显示在屏幕上。

2、将文件f1.txt的内容加密后,存入f2.txt中,读取f2.txt,并显示解密后的内容。

四、实验步骤和结果

1、使用Scanner类,实现从键盘上输入10个整数,然后将整数排序后,存入文件中,再从文件中读取出来,显示在屏幕上。

(1)程序设计思路如下:

①使用Scanner类,通过命令提示从键盘上输入10个整数,存入一个数组arr中。

‚使用java.util.Arrays类的sort()方法来对数组进行升序排列。

ƒ使用DataOutputStream 创建连接到指定文件

(D:\\IOTest\\shenxiaolinIOApp.dat)的数据输出流对象,并将排序后的数组存入文件中。

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

①在D:\\IOTest\\Encryption\\f1.txt目录下创建文件并在f1.txt写入内容。

‚编写加密程序为f1.txt文件内容进行加密并存入同目录下的f2.txt中。

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

时间: 2024-11-03 21:46:21

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

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

第八章      通用程序设计 45.      将局部变量的作用域最小化 将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. 要使用局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方才声明,不要过早的声明. 局部变量的作用域从它被声明的点开始扩展,一直到外围块的结束外.如果变量是在“使用它的块”之外被声明有,当程序退出该块之后,该变量仍是可见的,如果它在目标使用区之前或之后意外使用,将可能引发意外错误. 几乎每个局部变量的声明都应该包含一个初始化表达式,如

Java位运算在程序设计中的使用:位掩码(BitMask)

在Java中,位运算符有很多,例如与(&).非(~).或(|).异或(^).移位(<<和>>)等.这些运算符在日常编码中很少会用到. 在下面的一个例子中,会用到位掩码(BitMask),其中包含大量的位运算.不只是在Java中,其他编写语言中也是可以使用的. 例如,在一个系统中,用户一般有查询(Select).新增(Insert).修改(Update).删除(Selete)四种权限,四种权限有多种组合方式,也就是有16中不同的权限状态(2的4次方). 一般情况下会想到用四个

NJUPT JAVA语言 流处理程序设计

一. 实验目的和要求 实验目的和要求:要求学生能在学习和理解课堂学习内容中JAVA流编程理论的基础上,学习并逐步掌握JAVA流程序的编写和调试,学习根据处理需求对不同流的正确选择使用和组合使用方法. 实验内容:设计和编写一个程序从键盘读入一行字符串,将其写入一个文本文件中,再编写另一个程序从文本文件中读入字符串并在命令行窗口显示出来. 二.实验代码 写入文件 package think; import java.io.BufferedReader; import java.io.Buffered

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

. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. 2. 多线程编程的好处是什么? 在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态. 3. 用户线程和守护线程有什么区别? 当我们在Java

java银行自主柜员程序设计

/* * 信1705-2 20173611 谢培龙 */package 银行自主管理;import java.util.Scanner;//模仿银行自助存取一体机(ATM)public class TestUser4 { public static int end=1;public static void main(String[] args) throws InterruptedException {Account comd[]=new Account[5];comd[0]=new Accou

201671010117 2016-2017-2 《Java程序设计》Java第三周学习心得

Java第三周学习心得 通过这一周的学习,了解到了Java的核心部分,理解了用户自定义类的定义 ,了解了对象的声明 ,了解了使用构造函数初始化对象 ,使用类属性与方法的使用,了解了package和import语句的用途,知道了假设你面对现实世界的一个对象,你不会把它的属性和处理方法分开,程序设计也是一样.面向对象程序设计(OOP):一种新的思维方法,更接近人类处理现实世界问题的自然表示方法.面向对象的语言有:C++,Smalltalk,Java等.面向对象程序设计的几个主要概念:抽象数据类型.类

[连载]Java程序设计(01)---任务驱动方式:英制单位转换成公制单位

任务:你所在的公司是一家美国的服装设计和制造公司,现在这家公司打算进入欧洲市场,于是需要一个将英制单位(英寸)换算为公制单位(厘米)的程序.已知1英寸=2.54厘米,该程序输入以英寸为单位的长度,显示该长度对应的厘米数.例如:输入英寸:2.5,输出:2.5英寸=6.35厘米. package com.lovo; import java.util.Scanner; public class MyConverter { public static void main(String[] args) {

我的《实战java高并发程序设计》纸质书上市了

在过去单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发就显得尤为重要. <实战Java高并发程序设计>主要介绍基于Java的并行程序设计基础.思路.方法和实战.首先,立足于并发程序基础,详细介绍Java中进行并行程序设计的基本方法.第二,进一步详细介绍JDK中对并行程序的强大支持,帮助读者快速.稳健地进行并行程序开发.第三,详细讨论有关"锁"的优化和提高并行程序性能级别的方法和思路.第四,介绍并行的基本设计模式及Java8对并行程序的支

JAVA技术专题综述之线程篇(1)

本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public cla ThreadTest extends Thread{public void run(){for(int i=0;i<10;i++){Syste