`

JAVA文件和安全性

    博客分类:
  • Java
阅读更多
1 Java.io概述

1. 数据流是一个连续的字节块。从概念上讲,流的一端可以和数据源或数据接收其相连,另一端可    以认为与java.io包中的类相连。

2. 同数据源相连的流用来从源中读取数据,同这种流相连的java.I/O类能从流中读取字节,流能从   数据源中补充字节,这种流称为输入流

3. 同数据接收器相连的流用来向接收器中写数据,同这种流相连的java.I/O类能向流中插入字节,   流将字节送到数据接收器。
    

4. 字节级输入/出类结构层次:
     InputStream                        OutputStream
           FileInputStream                        FileOutputSteam
           FilterInputStream                                FilterOutputStream
                BufferedInputStream                              BufferedOutputStream
                DataInputStream                                  DataOutputStream


5. 字符级输入/出类结构层次:
      Reader                                         Writer
           BufferedReader                                  BufferedWirter
                LineNumberReader                          PrinterWriter
           InputStreamReader                              OutputStreamWriter
                FileReader                                    FileWriter

6. 对象级输入/出类结构层次:
       InputStream                                 OutputStream
            ObjectInputStream                             ObjectOutputStream

9.2 保存和读取字节级数据:

1.DataOutputStream向输出流中写一个Java的基本数据类型,所写的数据的方式是可移植的,即   与具体操作系统无关。

2.FileOutputStream类将输出流与一个文件连接,从而为写数据到文件中做准备。

3.如果用一个已存在的文件名创建一个FileOutputStream对象,则这个文件将在无任何警告的情   况下被一个新的空文件所取代。我们可以实用File或FileDialog类提供的方法来确保不会发生   偶然删除重要文件的失误。

4.使用DataOutputStream类与FileOutputStream类向文件写数据的方法:
    
5.DataInputStream类以与机器无关的方式从一个输入流中读Java的基本数据类型。任何一个方    法读取数据时超过流的尾部,将产生一个EOFException异常。

6.FileInputStream类从以存在的文件中读取字节,并返回一个与文件相连的输入流。

7.使用DataInputStream类与FileOutputStream类从文件读取数据的方法:
      

8.BufferedOutputStream类增强了批量数据输出的到另一个输出流的功能,数据首先写到一个内   部缓冲区中,只有缓冲区写满之后才一次性写入流中,当关闭流时,如果缓冲未满,就强迫将数    据压入输入流中,所有关于输出流操作的方法都是自动进行缓冲的。

9.使用DataOutputStream类与FileOutputStream类与BufferedOutputStream类向文件写数   据的方法:
 
10.File类用来代表一个文件,一个目录名或一个目录名和文件名的组合。所用到的文件名使用高     度系统相关的。

11.相关API:
     getName():  获取文件名            getPath():获取路径         
     exists(): 判断指定文件是否存在   isDirectory():判断是否路径   
     isFile(): 判断是否文件          listFiles():返回指定目录下的文件对象数组

12.可以使用System..getProperty(“user.dir”)来确保如果用户没有提供目录,则使用当前的    目录。

13.按特定的方法排序方法如下:
    1). 创建一个类实现接Comparator, 在类中实现该接口中的抽象方法compare (Object       o1, Object o2)

    2). 在主程序中调用Arrays类的Sort (Object a [ ], Comparator  c)方法,对数组a     中的对象按接口中的方法进行排序。

9.3 保存和读取字符数据:
1.    BufferedReader类从字符输入流中读取文本,在必要时将字符存入缓存。只要文字中含有换     行符、回车符或是回车换行,则认为是一行文本结束,如果在流中没有这些符号,则readLine    方法返回null而并不抛出一个异常。

2.    FileReader类可以非常方便地将一个文件连接到其他需要以Reader作为输入参数的类上。

3.    使用BufferedReader类与FileReader类,向文件写数据的方法:

4.    FileDialog类中有标准的“文件|打开”,“文件|保存”对话框,可以通过他们选择文件来读或     写,该对话框是模态对话框,一旦通过setVisible或show打开后,只有通过选择一个文件或     取消才能使她消失。该对话框含有确定和取消按钮,如果用户选择了取消,则getFile()方法     将返回null,如果该对话框的创建模式为SAVE,则在覆盖一个已有文件之前必须经过用户的确     认。

5.    相关API:
    getDirectory(): 获取文件的路径        getFile(): 获取文件名
6.    BufferedWriter类用来创建一个字符缓冲输出流,它主要为其他类通过一个字符输入流。
7.    PrintWriter类为格式化字符流提供了一些实用方法,该类的方法没有抛出任何异常,而是使     用checkError来检查则调用该方法之前是否出现了错误。
8.    FileWriter类把字符输出流与文件连接起来,FileWriter会毫无提示的删除一个已存在的文    件,所以通过File类或FileDialog类提供的方法,确保不会意外地删除用户的重要文件。
9.使用PrintWriter类,BufferedWirter类,FileWriter类向文件写数据的方法:
  

9.3 保存和读取对象数据
1.    LinkedList类:可以被当成堆栈、队列、双向队列使用
2.    常用API:
    add(int index,Object element):向列表中添加对象
    get(int index):返回指定位置的对象
    contains(Object o):判断LinkedList中是否含有指定的对象
    index(Object o):返回对象的下标
    set(int index,Object o):用指定对象代替指定位置上的原对象
    remove(int index):移除指定位置对象
3. Iterator接口通过提高顺序访问列表元素的方法简化类Java标准的列表结构所有的顺序处理的    过程。
4.    Java API定义类Iterator如下:
    boolean hasNext(): 判断当前指针是否已指向列表的末尾。
    Object next():返回当前的对象,并使一个内部指针指向列表中的下一个元素。
5.    Iterator对象可以通过Iterator方法来创建,Iterator方法是List接口中的方法,因而它     是所有的标准Java列表结构的一部分。Iterator允许通过一个快速简单的for循环连续处理      一个表中的元素。
    for (Iterator iterator=List.iterator ();iterator.hasNext();)
                System.out.println (iterator.next ());
6.    ObjectOutputStream类用来将原始的数据类型和整个对象写入到流中。为了向                ObjectOutputStream中写入对象,该对象所属的类必须是实现了java.io.Serializable     接口,写一个对象的默认机制是写它的原始类、类的特征、类中非瞬态(non-transient)即非    静态的成员变量。一个类实现Serializable接口的目的是使该类的对象可以写入到            ObjectOutputStream流中,并且可以通过ObjectOutputStream流读取这些对象。

7.    ObjectInputStream类被用来读取原来用ObjectOutputStream写入到流中的原始数据类型     和整个对象,同时还要使用Java的类型转换机制来恢复对象的类型。

8.    序列化使用非常方便,然而也引入了一个安全问题,因为存储则磁盘中的的数据与对象独立,无    法保护数据不被修改,该数据被重新读取的时候就会产生无效的时间。而且私有数据则对象中是    受保护的,不能在外部处理它,而一旦写入磁盘就可能暴露于外部操作之下。

9.    如果对象和安全性很重要,可以不使用默认的序列化对象方法,而是通过覆盖原有符来自定义序    列化。
    public void readObject (ObjectInputStream in) throws IOException,ClassNotFoundException
        {/*自定义读取对象的方法*/}
    public void writeObject (ObjectOutputStream out) throws IOException
        {/*自定义写对象的方法*/}
    public void writeObject (ObjectOutputStream out) throws IOException
        {throw NoAccessException}

9.4 Applet的文件操作和与安全性   
1.    在一个Java类执行前,JVM必须对其进行安全性检查和违例检查。甚至在运行过程中,每个       Java类还要受到安全管理器的控制,使它只能访问它有权访问的资源。如果它试图访问它无权     访问的资源,安全管理器将拒绝该请求,并抛出一个SecurityException异常。

2.    自定义的安全管理器则Web浏览器中不能使用,在Web浏览器中使用Applet必须服从Web浏览器    的安全限制。
3.    Applet在“沙盒”中执行,也就是说,Applet可以在计算机中预先划定的区域执行,而且不允     许超越该范围。安全管理器对其进行监督,如果Applet试图访问“沙盒”以外的资源,安全管理    器将拒绝访问并抛出异常。对Applet的安全限制有:
    1). Applet不能直接读写文件
    2). Applet只能通过它所在的主机才能进行网络连接
    3). Applet不能执行它所在主机的本地程序 (即用其他语言编写的程序)
    4). Applet不能读取和修改系统的属性。
    5). Applet执行时出现窗口,该窗口看起来与标准窗口不同
    6). Applet不能定义本地方法 (即用其他英语编写的方法)。

4.    只要文件被明确地声明为“公有文件”,Applet就能从该文件读取数据,所谓“公有文件”是位于        Web服务器公有地可读文件夹内的文件。

5.在Applet中读取文件的方法:
    1). 数据文件和Applet必须在物理位置上位于同一台机器上。
    2). 数据文件和Applet要么在本地机器上,要么在Web服务器的公共区域
    3). 必须使用URL类连接到数据文件,而不能使用FileInputStream。
    4). 该方法仅适用与输入流,不适用与输出流。
6.InputStreamReader类是字节流到字符流的桥梁,它读入字节并把他们转换为字符,它使用该        平台的默认编码,也可指定另外的编码。
7.与FileReader一样,InputStreamReader可连接一个BufferedReader,能取得更好的效率
 

9.5 系统I/O流
1.    System类保护类3个静态成员变量,他们描述类3个通用的流。这些流随时都是打开的,并准备        传送和接受数据。

2.    System.out:PrintStream类型     System.in: InputStream类型                        System.err:PrintStream类型

3.    setOut(PrintStream out):重新指定System.out为输出流out
    setIn(InputStream in):  重新指定System..in为输入流 in
    setErr(PrintStream out):重新指定System..err为输出流out

4.    重定向System..out或System.err对那些需要打印出状态和调试信息的程序很有用。

9.6 RandomAccessFile
1.    RandomAccessFile类的实例能支持同时读写文件。
2.    对该类的所有读操作,如还没有读完指定的字节数,但文件指针已执行了文件末尾,将会抛出一    个OFException异常,如果是由于其他原因不能读,就会抛出一个IOException而不是         EOFExeption;
    特别是如果文件关闭后再进行读写操作,也会抛出一个IOException。
3.    使用RandomAccessFile除了可以读写文件中任意位置的字节外,还可以读写文本和Java的基    本数据类型。
4.    常用API:
    randomAccessFile(String filename,String mode):mode为操作方式,说明该文件是”r”,或”rw”方式
    randomAccessFile(File file,String mode):file为指定的文件对象
    read():从文件中读取数据       
    read(Byte[] b):从当前指针位置开始读取数据到数组直至满为止
    readLine():读取当前文件的下一行文本   
    seek():设置当前文件指针

9.7 其他
1.    装载并显示图像的步骤:
    1).获取图像文件的路径,文件名:
        URL url=new URL (URL context, String filename) //context可以通过getCodeBase()获得
    2).通过默认的Toolkit获取图像文件:
        image=Toolkit.getDefaultToolkit (). getImage (url)
    3).将图片添加到MediaTracker类的对象中并加载:
        MediaTracker tracker=new MediaTracker (this);
        Tracker.addImage(image,0);        //将图片添加到tracker中,并且设置优先级为0(最高)
        Tracker.waitForAll();                //挂起任何操作,直到所有图像被完全载入
    4).调用画图方法画图:
        repaint ()

2.    由于加载图片时可能会触发异常,故需要捕捉
3.    通过getImage(URL url)获取的图片格式只能是GIF,JPEA,PNG之一。
4.    Inset类的对象用来指定一个容器的边框格式,即容器与边框的距离空间,该空间可以是边框,        空白区,标题。其构造方法为new Inset(int top,int left,int bottom,int right)
5.    getInset()方法规定了在由一个布局管理器布局时,组建可以接受多少填充内容。
6.    带标题的三维边框画法:
    w=getFontMetrics(font).stringWidth(title);    //返回用指定的字体显示的字符串度
    h=getFontMetrics(font).getMaxAscent()+1;    //返回用指定字体显示的字体高度
    d=h/2;                                //用于指定画图起点或边框的间距
    bgColor=Color.white;                    //用于指定图片的背景
    font=new Font(“Helvetica”,Font.BOLD,12);//用于指定显示的字体
    public void paint (Graphics g){
      g.setColor(Color.gray);
      g.drawRect(d,d,getSize().width-2*d,getSize().height-2*d);    //用于画出组件的边框

      g.setColor(Color.black);
      g.drawLine (getSize ().width-d+1,d
      getSize().width-d+1,getSize().height-d+1);    //用于画出组件的三维边框(竖)
      g.drawLine (d, getSize().height-d+1
      getSize().width-d+1,getSize().height-d+1);    //用于画出组件的三维边框(横)

        g.setFont(font);
        g.setColor(bgColor);
        g.fillRect((int)(1.5*h)-5,0,w+10,h+2);        //用于画出标题所在的边框
         g.setColor(Color.black);
        g.drawString(title,(int)(1.5*h),h-2);        //用于在边框中显示标题
}

    7.常用的画图API:
    1). drawLine (int x1, int y1, int x2, int y2) :
        在点(x1,y1)和点(x2,y2)之间画一条直线
    2).drawRect(int x, int y, int width, int height):
        以点(x,y)为原点画一个宽为width,高为height的矩形
    3). drawRoundRect (int x, int y, int width, int height, int arcWidth,         int arcHeight) :
        从点(x,y)开始画一个宽为width,高为height,四角的水平、垂直弧度直径为arcWidth,arcHeight矩形
    3). draw3Drect (int x, int y, int width, int height, boolean raised) :
        以点(x,y)为原点画一个宽为width,高为height的3D矩形,raised决定了矩形是否为突起或凹陷
    4). drawString (String str, int x, int y) :
        从点(x,y)处开始写字符串
    5). drawImage (Image img, int x, int y, ImageObserver observer) :
        在点(x,y)处开始尽可能的画图,并将信息及时返回给相应的ImageObserver对象。


分享到:
评论

相关推荐

    JAVA生成PDF文件(Demo+jar),可加密及设置安全性

    1.JAVA生成PDF文件,可加密及设置安全性 2.含编译好的其他jar包 3.含示例。

    java完整性校验解决方案

    而数据安全包括数据传输过程中的安全防范措施,包括数据完整性、传输安全性,接收/发送方不可否认性等方面。下面就数据完整性验证部分做简单的介绍。 下载过程中,没有被其他程序算改过?其他程序可能是网络传输过程...

    Java安全性编程指南.rar

    Java安全性编程指南.rar PDG格式文件

    JAVA文件传输的实现.rar

    安全性:可以采用加密算法、身份验证等技术确保文件传输过程中数据的安全性。 技术实现: Socket编程:利用Java的Socket API实现客户端和服务器之间的通信,建立TCP连接进行数据传输。 文件流操作:使用Java的文件...

    基于JAVA的RSA文件加密软件的设计与实现源代码

    该系统主要适用于需要保护文件安全性的个人或企业用户,提供可靠的文件加密保护服务。 该系统适用人群为需要保护文件安全性的个人或企业用户,主要使用场景包括:文件加密、文件解密、文件的保密传递等多种情况。该...

    JAVA 2平台安全技术-结构,API设计和实现

    本书明确而详尽地阐述了Java平台安全性,探究了Java安全结构的内幕。本书首先概述了计算机和网络安全概念并解释了Java安全模型,并在此基础上,详细描述了Java 2平台中新增加的许多安全结构方面的措施,同时对Java...

    Java安全性编程实例(徐迎晓)

    # 本章解决的是数据内容的安全性,介绍Java的加密和解密技术。学完该章可以通过Java编程对各种数据进行各种形式的加密。密码学也是安全机制的基础。 # 第三章 # 解决的主要问题——和源代码相关的安全性 # 编写好...

    Java 2平台安全技术-结构,API设计和实现

    1.8 Java安全性的适用范围 11 第2章 Java语言的基本安全特点 12 2.1 Java语言和平台 12 2.2 基本安全结构 13 2.3 字节代码验证和类型安全 14 2.4 签名应用小程序 15 2.5 关于安全错误及其修复的简要历史 16 第3章 ...

    基于Java的两个通用安全模块的设计与实现 毕业设计

    本文详细介绍了基于口令的身份认证与文件安全传输两个通用安全模块的设计原理和实现过程,分析了当前口令保存的安全性,提出了运用MD5算法等对口令进行处理,并将处理结果保存在数据库中的方法。同时为了进一步增强...

    Java 安全性_程指南.rar

    Java 安全性编程指南,知道JAVA关于安全方面更多知识。PDG格式文件。

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA_API1.6文档(中文)

    java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供...

    基于JAVA的安全报文系统设计

    使用socket技术、加密技术,通过用JAVA面向对象的编程环境,利用模块化设计方式,设计一个小型的基于JAVA的安全报文系统,能够实现信息端对端的文件加密安全传送,用户间字符流的传输、在线会话功能和文件的传输,完成提高...

    Java毕业设计-JAVA文件传输(论文+源代码).rar

    通过对比不同的设计方案,论文展示了该系统在性能、安全性和易用性方面的优势。同时,论文还探讨了Java在网络编程领域的应用前景,为读者提供了深入研究的方向。 源代码部分则包含了系统的全部实现细节,包括用户...

    JAVA程序设计判断题题库81道

    7. Java语言具有较好的安全性和可移植性及与平台无关等特性。( ) 答案:√ [考点范围] JAVA简介 8. Java语言的源程序不是编译型的,而是编译解析型的。( ) 答案:√ [考点范围] JAVA简介 9. Java Application...

    java类文件混合加密算法的研究与分析_邹煜.caj

    近年来,企业和java开发人员针对java类文件的保护,在对java底层类加 载机制的深度分析后,提出了一系列的保护措施,如本地编译、代码隔离技术、 代码混淆技术、数字水印技术。本文对Java类...

    Java毕业设计-基于JAVA的RSA文件加密软件的设计与实现(源代码+论文).rar

    该软件采用RSA非对称加密算法,对用户指定的文件进行加密和解密操作,确保文件数据的安全性和保密性。 主要特点: 1. **安全性高**:采用业界认可的RSA非对称加密算法,公钥加密、私钥解密,有效防止数据在传输...

    JAVA API官方中文文档

    Java API通过支持平台无关性和安全性,使得Java适应于网络应用。Java API是运行库的集合,它提供了一套访问主机系统资源的标准方法。 运行Java程序时,虚拟机装载程序的class文件所使用的Java API class文件。所有...

    Java安全知识点总结

    为确保密码的安全性,应使用适当的哈希算法进行存储,并结合加盐(salt)和迭代次数来增强密码的强度。 安全配置:Java应用程序的安全配置文件(如Web.xml、application.properties)需要正确设置,以防止常见的...

Global site tag (gtag.js) - Google Analytics