`
bupter520
  • 浏览: 56516 次
  • 性别: Icon_minigender_2
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Java IO 详解

阅读更多

    Java 语言中数据流是发送或接收数据的管道。通常,你的程序是流的一个端点,其它程序或文件是流的另一个端点。流式一维单向的,你可以从输入流读,但你不能对它写;同样,你可以向输出流写,但不能从输出流读。
    File 类可表示一个文件,也有可能是一个目录(在JAVA中文件和目录都属于这个类中,而且区分不是非常的明显,可以调用isDirectory()和isFile()来判断)。
File file = new File("c:\\abc.txt"); 
    常用的方法:
 exists()         用来判断文件或目录是否在硬盘存在
 isDirectory()    判断是否是目录
 isFile()         判断是否是文件
 mkdir()          创建目录
 mkdirs()         创建目录包括它下面的子目录。
 getAbsolutePath() 得到文件绝对路径
 list()            得到文件名的String数组 (得到当前目录下的文件名,目录名)
 listFiles()       返回File类型数组,(目录,文件的File对象)可用getName()得到文件名
 delete()          删除文件
 getName()         得到文件名
 getPath()         得到文件相对路径
 separtor()        得到文件分隔符 //这个方法有更好的通用性,平台不同结果不同
 deleteOnExit()    在进程退出的时候删除文件,常用在临时文件的删除。


流的分类:
    按处理方式来分:
        字节流:按8位传输 InputStream OutputStream
        字符流:按16位(Unicode)传输 Reader  Writer
    按功能来分:
        节点流:与文件、网络打交道的流,操作数据的来源[文件,内存,管道]
        处理流(包装流):操作节点流。过程流在其它流之上,完成排序、变换等操作。过程流也被称做过滤流。当你需要改变输入流的原始数据时,你可以将一个过滤输入流连接到一个原始的输入流上。用过滤流将原始数据变换成你需要的格式。

    如何区分:  
        输入流:以InputStream、Reader结尾的流
                FileInputStream BufferedReader
        输出流:以OutputStream、Writer结尾的流
                FileOutputStream PrintWriter

        字节流:以InputStream、OutputStream结尾的流
        字符流:以Reader、Writer结尾的流

        节点流:看构造器,参数为数据来源,参数是String或File之类的
                new FileInputStream("d:\\abc.txt");
                new FileOutputStream(new File("d:\\abc.txt"))
        处理流:构造器的参数为其它流
         new BufferedReader(new InputStreamReader(new FileInputStream("d:\\abc.txt")));
         PrintWriter

    选择流时:
        首先确定是输入还是输出。
        其次确定是字节流还是字符流。
        然后确定是节点流还是处理流。

    根据数据类型选择输入/输出流:
        ①byte、byte[] InputStream / OutputStream
        ②int、byte、char、double、String DataInputStream / DataOutputStream
        ③char、String Reader / Writer
        ④Object  ObjectInputStream / ObjectOutputStream
        若考虑性能会在前试着加Buffered

常用流:
    DataInputStream&DataOutputStream 用于读写基本类型数据,如int、float、long、double和   boolean等。此外DataInputStream的readUTF()方法还能读取采用UTF-8字符编码的字符串。 
    BufferedInputStream&BufferedOutputStream因为利用了缓冲区,所以常用于提高读写数据的效率。BufferedInputStream先把一批数据读入到缓冲区,接下来read方法只需要从缓冲区内获得数据,减少了物理性读取数据的次数。可以使用BufferedInputStream(InputStream in, int size) 中的size来指定缓冲区的大小。
    ObjectOutputStream&ObjectInputStream 对象的序列化是指把对象写到一个输出流中,对象的反序列化是指从一个输入流中读取一个对象。Java语言要求只有实现了java.io.Serializable接口的类的对象才能序列化和反序列化。
    Reader/Writer当需要程序读写文本文件,而且文本文件采用特定的字符编码集时,应采用Reader/Writer。
    InputStreamReader & OutputStreamWriter 桥梁流把字节流转换成字符流 在桥转换的时候可以指定编解码方式 new BufferedReader(new InputStreamReader(new FileInputStream("d:\\abc.txt"), "utf8"));
 BufferedReader readLine()方法可以一次读入一行字符,以字符串形式返回。

 PrintWriter 输出格式化的数据,所有的写数据的方法以print开头。 print (int i) print (long l) print (float f) print (String s) 每个print() 方法都有一个println()方法对应。

对象序列化
 1:定义:把对象作为一个整体,在I/O流中传播
 2:语法:
 (1)实现了Serializeble接口的对象才能可序列化。这个接口里没有任何方法,没有方法的接口称为标记接口。例如:class Student implements Serializeble{} 
 (2)如果一个序列化后的对象里面有一个属性是个对象属性,那么这个对象属性也需要实现序列化。
 例如:class Student implements Serializeble{
      Teacher t;//必须序列化
  }
  class Teacher implements Serializeble{}
 (3)包名、类名、属性可以被序列化,方法、构造器、静态属性不会序列化。用transient关键字修饰的属性是临时属性,临时属性不参与序列化。关键字transient表示当前内容将不被序列化,比如密码需要保密,所以没有被写入文件。 
 (4)当父类实现Serializeble接口,子类自动实现。对象序列化会创建对象,不调用构造,但子类实现Serializeble接口,父类没有实现实现Serializeble接口,父类在反序列化时会调用构造。

 3:使用注意:
    a.用readObject读文件的时候,当文件结束的时候会抛出EOFException,当我们捕获这个异常的时候,程序就结束了。
      Object o = null;
      while((o =ois.readObject()) != null) {
 
      }
    b.如果需要向一个文件中追加对象,首先要把文件中原有的对象读出来,再把原有对象和新追加的对象一起写入到文件。 
    c. serialVersionUID是静态常量,表示当前对象的版本号,在接受传输的数据时会自动检查该值,保证版本的相同。
    java.util.Properties属性类,针对属性文件操作,早期使用。 好处是可以在不修改代码的情况下改变相应的需求。 文件名以.properties结尾的文件称为属性文件 文件的内容是:名字=值 的形式
    常用方法: 
  public void load(InputStream inStream)throws IOException
  public void store(OutputStream out,String comments)throws IOException
  public String getProperty(String key)
  public String getProperty(String key,String defaultValue)
  public Object setProperty(String key,String value)

一提到从键盘读取数据 就会联想到:
new BufferedReader(new InputStreamReader(System.in));
从文件中逐行读入数据:
BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java" ));

PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out" )));
将一个字符串写入文件:
BufferedReader in2 = new BufferedReader(new StringReader(s2));
这句话体现了Java输入输出系统的一个特点,为了达到某个目的,需要包装好几层。首先,输出目的地是文件IODemo.out,所以最内层包装的是FileWriter,建立一个输出文件流,接下来,我们希望这个流是缓冲的,所以用BufferedWriter 来包装它以达到目的,最后,我们需要格式化输出结果,于是将PrintWriter 包在最外层。
在这里java.lang.System的静态方法static void setIn(InputStream in)
static void setOut(PrintStream out) 

  提供了重新定义标准输入输出流的方法,这样做是很方便的,比如一个程序的结果有很多,有时候甚至要翻页显示,这样不便于观看结果,这是你就可以将标准输出流定义为一个文件流,程序运行完之后打开相应的文件观看结果,就直观了许多。



RandomAccessFile 对象按照与数据输入输出对象相同的方式来读写信息。你可以访问在DataInputStrem和 DataOutputStream中所有的read()和write()操作。Java编程语言提供了若干种方法,用来帮助你在文件中移动。



 

 

 

 

  • 大小: 33.2 KB
  • 大小: 23.3 KB
  • 大小: 29 KB
  • 大小: 25.7 KB
分享到:
评论

相关推荐

    Java教程之javaIO详解

    Java IO 详解 Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File ...

    java IO详解课件

    ### Java IO详解知识点 #### 一、Java IO系统概述 - **Java I/O系统的重要性**:Java I/O系统是Java编程中的基础组成部分之一,用于处理数据的输入与输出。理解和熟练掌握Java I/O系统对于开发高质量的应用程序至...

    java IO操作详解.pdf

    ### Java IO操作详解 #### 一、Java IO基础概念 Java IO(Input/Output)是Java编程语言中处理输入输出的基础框架。它提供了多种类和接口来处理不同类型的输入输出需求,包括文件读写、网络通信等。Java IO体系...

    java io 详解

    ### Java IO 详解 #### 一、Java IO体系概述 Java IO(Input/Output)是Java编程语言中处理输入输出的基础。它主要包括两大类:字节流和字符流。字节流主要处理二进制数据,如图片、音频等;字符流则用于处理文本...

    java中的io详解.

    Java 中的 IO 详解 Java IO 是指应用程序对外部设备的数据输入和输出,在程序中,键盘被当作输入文件,显示器被当作输出文件使用。Java 语言定义了许多类专门负责各种方式的输入输出,这些类都被放在 java.io 包中...

    java_io详解

    ### Java IO详解 #### 1. 什么是IO 在计算机科学中,IO(Input/Output,输入/输出)指的是程序与外部系统之间进行数据交换的过程。在Java中,IO操作主要通过`java.io`包来实现,这个包包含了用于文件读写、标准...

    javaio详解【2】.pdf

    Java IO 是Java平台中用于处理输入输出操作的重要部分,它提供了丰富的类库,使得开发者能够高效地读写数据。在Java中,IO是以流为基础进行的,数据被串行化写入输出流或从输入流读取。Java的IO体系分为字节流和字符...

    32.9、java io详解1

    Java IO 之字节流和字符流的区别 Java 中的 IO 操作是指对文件、网络或其他输入/输出设备的读写操作。Java 中的 IO 操作可以分为两大类:字节流和字符流。字节流和字符流是 Java 中的两种基本的 IO 操作方式,它们...

    JavaIO文件复制优化-JavaIO优化详解(下载可用)

    JavaIO文件复制优化——JavaIO优化详解(下载可用)。个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。...

    Java_IO流详解

    Java_IO流详解 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    JavaIO流详解归纳.pdf

    JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    java中的io流详解

    Java 中的 IO 流详解 Java 中的 IO 流是指在 Java 语言中对输入输出操作的抽象,主要用于实现程序与外部设备和其他计算机之间的交流,尤其是对磁盘文件的操作。IO 流的概念是在 1984 年由 C 语言第一次引入的,后来...

    java IO流详解

    ### Java IO流详解 #### 一、流的概述与分类 在Java中,流是一种抽象概念,用于描述数据从一个地方传输到另一个地方的过程。它主要用于处理数据输入和输出,例如从磁盘读取文件、向网络发送数据或从键盘接收用户...

    java IO部分详解

    java IO部分详解各种流的解析例如 InputStream

    java.io详解

    ### Java IO流详解 #### 一、Java IO流概述 Java IO流是Java标准库中的一个重要组成部分,主要用于处理数据的输入输出操作。根据处理的数据类型不同,Java IO流被分为两大类:字节流(byte streams)和字符流...

    JAVA IO流详解

    ### JAVA IO流详解 #### 一、Java IO流概述 Java IO流是Java程序与外部设备之间进行数据交互的重要方式之一。Java的核心库`java.io`提供了丰富的接口用于实现文件读写、标准设备输入输出等功能。Java IO流的设计...

    java IO流详细笔记

    Java IO流详解

    JavaIO流详解

    ### Java IO流详解 #### 一、流的概念 在探讨Java IO流之前,我们需要先理解“流”的概念。流的概念最初来源于UNIX系统中的管道(pipe)机制。在UNIX环境中,管道是一种特殊的通信机制,用于连接两个进程之间的...

    JAVA_IO详解_包括讲解IO中各种流及其用法.pdf

    JAVA IO流是Java编程中用于处理输入输出操作的重要工具。IO流主要分为两大类,即输入流(Input Streams)和输出流(Output Streams),它们用于读取或写入数据到不同的数据源,比如文件、网络连接或内存中的字节数组。在...

    java_IO 详解java_IO 详解

    Java IO 流的理解和使用。 Java 的 IO 模块是其强大的特性之一,它提供了丰富的类和接口用于处理输入和输出操作。IO 流在 Java 中扮演着至关重要的角色,尤其是在处理文件、网络通信和系统间的数据交换时。Java 的 ...

Global site tag (gtag.js) - Google Analytics