JAVA中I/O的基础知识

来源:互联网 发布:淘宝开店需要交保证金 编辑:程序博客网 时间:2024/06/06 03:29

JAVA中I/O的基础知识

1.1 File类和流

File类包含了获得一个文件/目录的属性,以及对文件/目录进行改名和删除的方法。但它不包括创建文件的方法,也不包括从/向文件读/写数据的方法。

流的分类:根据数据的单位不同分为字节流和字符流;
    根据数据的流向分为输出流和输入流;

1.2 文本文件的I/O

  1. 写数据——PrintWriter
PrintWriter(file)可以创建一个文件并向文件写入数据;
     2. 读数据——Scanner
从键盘读取:Scanner in = new Scanner(System.in);
从文件读取:Scanner input = new Scanner(file);

1.3 从Web上读取数据

1. 创建URL对象

try{    URL url = new URL("http://www.google.com/index.html");}catch(MalformedURLException ex) {    ex.printStackTrace();}

2. 读取数据
使用URL类中定义的openStream()方法来打开输入流和用输出流创建如下Scanner对象;

Scanner input = new Scanner(url.openStream());

这样就可以从输入流中读取数据了,如同从本地文件中读取一样。

1.4 二进制I/O

文本I/O将数据解释成字符序列,二进制I/O将数据解释成原始的二进制数值。文本在文件中的存储依赖于文件的编码方式。Java自动完成对文本I/O的编码和解码。由于二进制I/O不需要编码和解码,所以,它比文本I/O效率高。

二进制的I/O类:抽象类InputStream是读取二进制数据的根类,抽象类OutputStream是写入二进制数据的根类;

1. 文件的I/O——FileInputStream和FileOutputStream

try(    FileoutputStream outpur = new FileOutputStream("temp.dat");) {    for (int i = 1,i<=10,i++)        output.write(i);}try (    FileInputStream input = new FileInputStream("temp.dat");) {    int value;
//输入值为-1意味着文件的结束    while((value = input.read()) != -1)        System.out.print(value+"");}
首先为文件temp.dat创建了一个FileOutputStream对象,for循环将10个字节值写入文件;然后为文件temp.dat创建了一个FileInputStream对象,读取字节值并在控制台上显示出来。


2.Data类的I/O ——用来读写基本类型数据和字符串

    DataInputStream——从数据流读取字节,并且将它们转化为合适的基本类型值或字符串;

    DataOutputStream——将基本类型的值或字符串转换为字节,并且将字节输出到数据流;

    DataInput接口,定义了读取基本数据类型和字符串的方法(如,readInt、readDouble、readChar、readBoolran和readUTF)。DataOutput接口,定义了输出基本数据类型和字符串的方法(如,writeInt、writeDouble、writeChar、writeBoolean和writeUTF)。

DataInputStream input = new DataInputStream(new FileInpoutStream("in.dat"));DataOutputStream output = new DataOutputStream(new FileOutpoutStream("in.dat"));


3.缓冲区的I/O——BufferedInputStream和BufferedOutputStream

这两个类在后台管理了一个缓冲区,根据要求自动从磁盘中读取数据和写入数据(默认缓冲区大小为512个字节),通过减少磁盘读写次数来提高输入和输出的速度。


4.对象I/O——ObjectInputStream和ObjectOutputStream

可以用于读/写可序列化的对象。因为对象包括Data,所以Data类I/O可以被对象I/O代替。其次,为了提高程序的性能,可以如下创建流:

ObjectOutputStream output = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("object.dat")));

5. 随机访问文件——RandomAccessFile类

    之前的所有流都是只读或只写的,这些流成为顺序(sequential)流。使用顺序流打开的文件称为顺序访问文件。顺序访问文件的内容不能更新。然而,经常需要修改文件。Java提供了RandomAccessFile类,允许在文件的任意位置上进行读写。使用RandomAccessFile打开的文件成为随机访问文件。

    当创建一个RandomAccessFile时,可以指定两种模式("r"或"rw")之一。"r"表明这个数据流是只读的,"rw"表明这个数据流既可以读,也可以写。

RandomAccessFile raf = new RandomAccessFile("test.dat","rw");

0 0
原创粉丝点击