首页 > 编程知识 正文

简述会计档案的销毁程序(擅自销毁保密文件怎么处理)

时间:2023-05-04 21:06:06 阅读:92880 作者:3806

软件项目实训及课程设计指导——如何正确地创建和销毁软件应用系统中文件IO流对象实例

1、Java文件输入输出(读写)相关的技术基础知识

(1)流(流) )。

这是将数据从生产者(如键盘、磁盘文件、内存和其他设备)通过缓冲机制传输到接收数据的消费者(如屏幕、文件和内存)的过程的抽象。 流在程序操作中最终表现为一系列数据。

(2)缓冲区) )。

缓冲区实际上是指在主要用于缓冲输入输出数据的内存区域中保留一定的存储空间。

流的两端通常设有用于临时存储数据的数据缓冲区。 这样,接收方就不需要经常监视流中是否有数据,数据到来后可以暂时放入缓冲区,并根据需要进行读取。

同样地,发送端也不会每隔一个字节调用发送的功能方法立即发送数据,而是在数据聚集到一定数量后一起发送,从而大幅提高发送效率。 下图显示了缓冲区在流数据传输中的主要作用。

(3)输入流和输出流

Java的流有方向性。 其中,输入流表示数据的提供者,可以从输入流读取数据——。 因此,如果需要在软件APP应用程序中读取目标数据,则必须在程序中创建输入流对象实例。 输出流表示数据的接收者,可以将数据写入输出流。 因此,如果需要将软件APP系统中程序生成的数据存储在目标介质上,则需要以编程方式创建输出流对象实例。 下图显示了输入流和输出流的工作原理。

2、在Java语言中提供了IO流相关技术的支持

(1)为什么要采用流的结构来实现数据的读写功能?

Java语言提供IO流的技术支持,使得与软件APP io操作无关的存储设备和操作系统的输入/输出实现技术——软件APP应用的开发者可以通过Windows操作系统和非可以实现用相同的程序实现方式处理数据流(读写)、传输(网络)等的功能。

流IO的主要优点是使用方便,但缺点是效率低。 因此,我们添加了一个在Java2中添加了数据块的系统包java.nio。 java.io包支持的Java IO和java.nio包支持的Java NIO之间的主要区别如下。

首先,Java IO是面向流的,Java NIO是面向缓冲区的; 接下来,Java IO的各种流类被线程阻塞,而Java NIO提供非阻塞模式。

(2) Java语言中IO流应用时的规则

Java IO实现的基本规则是,使用面向对象的文件读写方式来操作软件APP系统中的相关文件——,将读写的文件数据转换为适当的流类, 根据读写操作的种类,转换为输入流类或输出流类,用流对象内的方法完成数据的读写操作,最后关闭文件流对象,释放使用的系统资源。

下图中的程序代码片段示例显示了在Java语言的IO流编程APP中必须遵守的基本规则。

3、JDK系统库提供java.io和java.nio两种不同的系统包

下图是JDK系统库帮助文档中Java核心库java.io包功能说明的部分屏幕快照。

Java核心库java.IO包提供了全面的io接口和各种形式的流类,而核心库java.nio还提供了块传输技术支持。 在Java语言中,IO模型的设计非常出色,使用“解码器”(Decorator )模式设计各个流类,允许开发人员根据需要动态地组装流类。

下图是JDK系统库帮助文档中Java核心库java.nio包功能说明的部分屏幕快照。

4、java.io包中各种流类的功能和相互关系

java.io包包含具有各种功能的流类

,它们为用户提供许多有关文件数据或者网络通信数据的各个方面的 操作。这些流类使用装饰器(Decorator)设计模式,并允许在程序中可以动态地装配流类(如需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和BufferedInputStream两个流类)。在java.io程序包中的各个流类的结构关系如下示图所示。

其中的InputStream和OutputStream接口为根接口(抽象类型),而代表数据源的IO流类是FileInputStream和FileOutputStream,ByteArrayInputStream和ByteArrayOutputStream等类。

具有装饰功能的IO流类则分别是BufferedInputStream和BufferedOutputStream,DataInputStream和DataOutputStream等,它们都是继承装饰接口FilterInputStream和FilterOutputStream等流类。

5、在软件应用系统中如何正确地创建出IO流类的对象实例

依据上图中java.io程序包内的各个流类的结构关系可以了解到,在Java语言中的IO流类主要可以分为二进制格式数据流、文本格式数据流、随机文件数据流等类型,并为每种形式的IO流操作提供了多种不同层次的IO流类。

因此,根据面向对象类设计中的依赖倒置原则,在程序中构造不同IO流类的对象实例时,应该声明为IO流的基类型的对象实例。比如实现读取本地文件中的数据IO操作,应该声明为抽象基类InputStream类的对象实例,但采用其子类FileInputStream类具体进行对象实例化——因为抽象类本身是不能直接实例化对象的:

InputStream oneInputStream=new FileInputStream(new File("文件名称"));

6、在软件应用系统中如何正确地关闭所创建出的IO流类的对象实例

由于每次构造出IO流的对象实例时,Java 虚拟机JVM系统都需要为该流对象实例分配一定的资源(如数据缓冲区和内存空间等)。当该文件流对象实例不再被使用时,应该及时地关闭该文件流对象实例以释放Java 虚拟机JVM为它所分配的系统资源,否则将产生资源空间等方面的浪费。

一般可以调用某个流类中的close功能方法完成对该流对象实例的关闭,并且再将该流对象设置为null,请见下面的代码片段示例,其中的oneInputStream变量代表某个流类的对象实例:

try{ oneInputStream.close(); oneInputStream=null; } catch(IOException e){ }

7、在程序中使用 finally 关键字确保IO流类的对象实例能够永远被关闭

Java 异常处理模型中的finally 关键字为软件应用系统的开发人员提供了对异常处理的最佳补充。finally语句块使得其中的程序代码总会被执行,而不管系统中是否有无异常的发生或者抛出。软件应用系统的开发人员使用finally关键字可以确保对象的内部状态的一致性和清理非内存资源。

因此,为了确保软件应用系统项目中的IO流类的对象实例能够永远被关闭,应该采用下面形式的代码片段。因为finally关键字所构造的语句块能够确保其中的close 方法总被执行,而不管其上面的try 语句块内是否产生了异常。

这种形式的程序代码,可以确保在退出该方法之前总会调用close 方法,从而保证不会出现泄漏IO流资源的问题。程序代码片段示例如下,其中的oneInputStream变量代表某个流类的对象实例:

finally { try{ oneInputStream.close(); oneInputStream=null; } catch(IOException e){ } }

8、利用随机数据流RandomAccessFile类实现日志记录功能的示例

在本示例中,利用随机数据流RandomAccessFile类来实现记录用户在键盘的输入,每执行一次,将用户的键盘输入存储在指定的RandomUserInput.txt文件中——"追加",比如日志记录,消息记录。

(1)在MyEclipse开发工具中创建出RandomFileRW类

(2)RandomFileRW类的代码示例

package com.px1987.javaio; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class RandomFileRW { String fileName="E:\JavaExamp\J2SEExamp\RandomUserInput.txt"; RandomAccessFile oneRandomAccessFile=null; public RandomFileRW() { StringBuffer oneStringBuffer=new StringBuffer(); char userInputOnechar; try{ try { while((userInputOnechar = (char) System.in.read()) != 'r'){ oneStringBuffer.append(userInputOnechar); } } catch (IOException e) { e.printStackTrace(); } try { oneRandomAccessFile=new RandomAccessFile(fileName,"rw"); } catch (FileNotFoundException e) { e.printStackTrace(); } try { oneRandomAccessFile.seek(oneRandomAccessFile.length()); } catch (IOException e) { e.printStackTrace(); } try { oneRandomAccessFile.writeBytes(oneStringBuffer.toString()); } catch (IOException e) { e.printStackTrace(); } } finally{ try { oneRandomAccessFile.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { RandomFileRW oneRandomFileRW=new RandomFileRW(); } }

(3)在MyEclipse开发工具中直接执行的结果

如何应用Java反射技术灵活地创建程序类的对象实例

软件项目实训及课程设计指导——如何对课程设计中的项目进行选型

如何应用GOF设计模式中的构建者模式创建复合对象实例

软件项目实训及课程设计指导——学习课程设计相关知识和应用技术

软件项目实训及课程设计指导——实体类结构和类关系的设计示例

如何合理地创建对象实例以降低程序类之间关系的耦合度

如何应用GOF设计模式中的创建型模式实现松耦合地创建对象实例

如何正确应用对象/关系映射技术实现系统持久层中各个DAO组件

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。