`

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

    Java虚拟机的安全性是确保Java代码在执行过程中不会对宿主系统造成危害,Java类加载器负责将类文件加载到JVM中,其安全机制确保了只有合法的类才能被加载执行。Java语言本身提供了类型安全、异常处理、访问控制等...

    关于java语言的安全性

    Java的沙箱模型是其安全性的基石,它限制了代码的运行权限。所有Java应用程序都运行在一个虚拟机中,这个虚拟机就像是一个封闭的环境,只允许代码在指定的范围内活动,防止了代码对主机系统的直接操作,降低了安全...

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

    本项目着重介绍了如何在Java环境中生成PDF文件,并且对其进行加密以及设置安全性。下面我们将深入探讨相关知识点。 首先,我们关注的是"JAVA生成PDF文件"。Java中常用的PDF库有iText、Apache PDFBox、 Flying ...

    Java安全性编程实例

    Java安全性编程实例主要涵盖的是Java平台上的安全机制和实践,这对于任何希望构建可靠、安全的Java应用程序的开发者来说都是至关重要的。Java作为一种跨平台的编程语言,其安全性是其核心特性之一,它提供了多种机制...

    java文件打成jar包

    Java 文件打成 JAR 包 Java 文件打成 JAR 包是 Java 开发中一个常见的操作,这样可以方便地发布和分发 Java 应用...将 Java 文件打成 JAR 包可以方便地发布和分发 Java 应用程序,并提高应用程序的安全性和可靠性。

    Java安全性编程实例.

    Java安全性编程是一个重要的主题,尤其是在开发企业级应用或者网络服务时。它涉及到多个层面,包括防止恶意代码执行、保护用户数据、确保程序的完整性和稳定性等。本实例集主要关注如何在Java环境中实现安全的多线程...

    java安全性编程教案(java)

    Java安全性编程是Java开发中的重要领域,特别是在网络应用技术中,确保代码安全是开发者必须面对的关键挑战。本教案将深入探讨Java平台的安全机制,通过实例讲解如何有效地进行安全性编程。 一、Java安全模型基础 ...

    java文件上传和下载功能

    在`FileUploadServlet`中,需要注意处理文件大小限制、异常处理和文件重命名等问题,以确保服务的稳定性和安全性。在`FileDownloadServlet`中,要确保文件路径的安全性,防止路径遍历攻击。 此外,项目的实现可能还...

    Java文件同步开源项目Sync

    【Java文件同步开源项目Sync】是一个基于Java语言开发的实用工具,主要目的是提供高效、可靠的文件和目录同步功能。这个开源项目为开发者提供了一个简单易用的命令行接口,允许用户方便地对本地或远程文件系统进行...

    java_安全性编程实例.pdf

    在Java平台上,安全编程是一个关键的实践领域,因为它提供了丰富的API和机制来确保应用程序的安全性。 首先,Java的安全模型是基于类加载器和安全策略的。每个Java应用程序都运行在一个称为“安全上下文”的环境中...

    Java安全性编程指南(PDG)

    《Java安全性编程指南》是一本深入探讨如何在Java平台上实现安全编程的重要著作。该书针对的是那些希望构建安全、可靠的Java应用程序的开发者。在Java语言中,安全性是至关重要的,因为它的跨平台特性使得它成为了...

    java通过文件头内容判断文件类型

    在Java编程中,判断文件类型通常不是通过文件扩展名,而是通过读取文件的头部字节来识别。这是因为有些文件可能...理解并掌握这个方法,能够帮助我们在实际开发中更好地处理各种文件操作,提高程序的健壮性和安全性。

    Java实现文件的RSA和DES加密

    Java 实现文件的 RSA 和 DES 加密 在现代密码技术中,根据密钥类型的不同,可以将其分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称加密算法用来对敏感数据等信息进行加密,常用的...

    java源码 java 获取文件md5值(用于检测文件完整性) 2018127

    在Java编程中,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够将任意长度的数据转化为固定长度的摘要表示,通常用于验证文件的完整性和一致性。本示例代码是关于如何使用Java来计算文件的MD5哈希...

    java完整性校验解决方案

    除了MD5,还有其他哈希算法,如SHA-1和SHA-256,它们提供了更高的安全性,因为更难找到两个数据输入产生相同的哈希值。然而,由于MD5的安全性相对较弱,已经被破解,现在更多地用于快速校验而非安全用途。 总之,...

    Java版文件系统

    使用Java的安全管理器(`SecurityManager`)和访问控制器(`AccessController`)可以增强系统的安全性。 通过以上知识点的学习和实践,开发者可以构建一个功能完备且健壮的Java版文件系统,虽然它可能无法完全替代...

    Java安全性编程指南.rar

    6. **代码签名**:Java允许对代码进行数字签名,确保代码来源的可信性和完整性。签名的代码在运行前会进行验证,防止篡改和欺诈。 7. **权限管理**:Java的权限模型通过Permissions类定义了不同类型的权限,如文件...

    Java安全性编程源代码

    这个压缩包包含的源代码很可能是不同章节关于Java安全性的实例和示例,涵盖了广泛的议题。让我们逐一解析这些章节可能涉及的知识点。 1. **CH2** - 可能是关于“Java安全模型基础”的章节。此章可能会介绍Java的...

    性能最好的Java文件上传组件

    3. **安全性**:内置的安全机制,如加密传输,确保数据在上传过程中的安全。 4. **易于集成**:通过Java SDK,可以轻松地将文件上传功能集成到任何Java项目中。 5. **成本效益**:云存储通常按使用量计费,可以节省...

    java多文件上传实现

    在Java开发中,多文件上传是一项常见的功能,尤其在Web应用中,用户可能需要一次性上传多个文件,如图片、文档等。本知识点将详细介绍如何在...在实际开发中,根据具体需求进行调整和优化,确保功能的稳定性和安全性。

Global site tag (gtag.js) - Google Analytics