码迷,mamicode.com
首页 > 编程语言 > 详细

Java I/O 应用程序设计

时间:2015-12-11 22:07:10      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

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

班级  2013计三班    

一、实验目的

掌握数据流的使用

二、实验环境

1微型计算机一台 

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

Java I/O 应用程序设计

标签:

原文地址:http://www.cnblogs.com/shenxiaolin/p/5040304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!