`

java流总结

阅读更多

作者——bobo

学习java时,关于I/O流这一块的内容学了个一知半解,一年过去了,做过一些项目后才发现,这种囫囵吞枣试的学习方式真的不可取,由于这些基础知识掌握不够牢固,项目中也难免会遇到各种磕磕绊绊,于是重新拿起当时学java的那本书再系统性的把这些基础知识再巩固一番,做一个总结,今天主要把IO流又复习了一遍,下面是我关于java输入输出流的总结,看的人别喷,因为我现在刚大二结束,还有很多需要像前辈们学习的。

什么是流?看到“流”,我们一般会想到水,对!就像是水,水在管道中流动,这就是流。水流一定会有源头和目的地,IO流也不例外,“源头”我们称它为输入流(InputStream),“目的地”我们称它为输出流(OutputStream)。程序是从指向源的输入流中读取源中的数据,通过向输出流写入数据到把数据传送到目的地。(注:我们通常用到的输入输出流都是跟文件存取有关,但程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口等) 

关于对流的知识了解一定要建立在对文件操作比较熟悉的基础上的,但文件操作的知识笔者就不在此处泼墨了,所以如果你还不懂关于文件的基本操作,先去了解一下再接着读本篇文章。java的java.io包提供了大量的流类,java把InputStream抽象类的子类创建的流对象称作字节输入流,OutputStream抽象类的子类创建的对象称作字节输出流,把Reader抽象类的子类创建的流对象称作字符输入流、Writer抽象类的子类创建的对象称作字符输出流  ,当然java中还有很多种流,如随机流(RandomAccessFile),数组流(ByteArrayOutputStream),数据流(DataInputStream和DataOutputStream),带进度条的输入流(ProgressMonitorInputStream),对象流(ObjectInputStream和ObjectOutputStream)等,笔者也不再一一介绍,只介绍这些常用的,基础的流操作。

1、文件字节流

FileInputStream类创建的对象被称作文件字节输入流。FileInputStream是从InputStream中派生出来的 简单的输入流类,为了创建FileInputStream类的对象,用户可以调用它的构造方法。下面显示了两个构造方法:

FileInputStream(String name);

FileInputStream(File file);

第一个构造方法里面的参数表示文件名,使用该构造方法创建一个给定的文件名为name的FileInputStream对象。

第二个构造方法里面的参数表示一个文件对象,使用该构造方法创建一个指定文件file的FileInputStream对象。

以字节为单位读取文件:

FileinputStream继承了InputStream的read方法,read方法的格式有这么三种:

int read();

该方法顺序地读取源中的单个字节数据,返回字节值(0~255之间的一个整数),如果到达源的末尾,该方法 返回-1。

int read(byte b[]);

该方法试图从文件中读取b.length()个字节,然后将读取的字节放在b数组中。返回实际读取的字节个数,如果 到达文件末尾,返回-1

int read(byte b[] , int off , int len);

该放放试图从文件中读取len个字节,并将读取的字节存放在b数组中。off是首字节在数组中的存放位置。返回 实际读取的字节个数,如果到达文件的末尾,方法返回-1.

public class Test {

	public static void main(String args[]){
		int a;
		byte b[] = new byte[512];
		try{
			File f = new File("test.txt");
			FileInputStream  fis = new FileInputStream(f);//文件流指向f对象
			while((a = fis.read(b,0,512)) != -1){//如果没读到文件末尾则继续
				String s = new String(b,0,a);
				System.out.println(s);
			}
			fis.close();//不要忘记关闭哦
		}catch(IOException e){
			e.printStackTrace();//打印栈追踪
		}
	}
}

  FileOutputStream类与FileInputStream类是相对应的类。它创建 的对象被称作文件字节输出流,文件字节输出流提供了基本的文件写入能 力。FileOutputStream类也有两个构造方法:

FileOutputStream(String name);

FileOutputStream(File file);

第一个构造方法里面的参数表示文件名,使用该构造方法创建一个给 定的文件名为name的FileOutputStream对象。

第二个构造方法里面的参数表示一个文件对象,使用该构造方法创建 一个指定文件file的FileOutputStream对象。

FileOutputStream继承了OutputStream的write方法,write方法 的格式有这么两种:

public void write(byte b[]);

该方法的功能是写b.length个字节到文件

public void write(byte b[],int off,int len);

该放放的功能是从给定字节数组中起始于偏移量off处写len个字节到文 件,参数b是存放了数据的字节数组、off是数据的起始偏移量、len是要写出 字节数。

FileOutStream流顺序地写文件,只要不关闭流,每次调用write方法 就顺序地向文件写入内容,直到流被关闭。(注:如果要写入的文件不存 在,该流将首先创建要写的文件,然后再向文件写入内容,如果文件已存 在,则刷新文件的内容,然后再顺序地向文件写入内容。)下面是一个实 例:

public class Test {

	public static void main(String args[]){
		
		byte b[] = "hello world!".getBytes(); 
		try{
			File f = new File("E://test.txt");
			FileOutputStream  fos = new FileOutputStream(f);//文件输出流指向f对象
			fos.write(b);
			fos.write(b, 0, b.length);
			fos.close();	
		}catch(IOException e){
			e.printStackTrace();//打印栈追踪
		}
	}
}

  关于FileInputStream和FileOutputStream的介绍就以上这些,但可能 家跟我一样,用这种方式进行文件的读写往往会出现乱码现象,那是因为字 节输入输出流使用字节数组读写数据,即以字节为基本单位处理数据。因 此,字节流不能很好地操作Unicode字符,比如一个汉字在文件中占用两个 字节,如果使用字节流,就会因为读取不当出现“乱码”现象。不过sun早就 为我们考虑到了这一点,为了方便开发者,java还提供了文件字符流。与 FileInputStream和FileOutputStream字节流相对应的是FileReader、 FileWriter字符流,FileReader和FileWriter分别是Reader和Wirter的子 类,其构造方法分别是:

FileReader(String filename);FileReader(File file);

FileWriter(String filename);FileWriter(File file);

FileReader中主要有这几个方法int read();int read(char c[]);int read(char c[] , int off , int len);

FileWriter中主要有这几个方法void write(char c[]);void write(char c[] , int off , int length); void write(int n);

注意这几个方法的格式跟刚才字节流的那几个方法几乎雷同,所以用法也基本一致,只是有点不同的是write中多了一个wirte(int n)这个方法, 该方法是向文件写入一个字符,n表示字符的ASCII值。

可大家还会发现一个问题,用这些方法写入文件时,都是将文件本来的内容清空后重写的,但很多时候我们想要在原有的基础上追加一段内容,这个时候不妨试试FileWriter的构造方法FileWriter(File file , boolean flag);第二个参数就表示要不要在原有的基础上追加。

接下来再介绍种特殊的流——缓冲流(BufferedReader/

BufferedWriter)。BufferedReaderBufferedWriter类创建的对象称作

缓冲输入、输出流,二者增强了读写文件的能力。比如有时候我们想要按行 读取文件的内容,这个时候用缓冲流就会大大方便 了。BufferedReader和BufferedWriter二者的源和目的地必须是字符输

入流和字符输出流。所以如果把字符输入流作为BufferedReader流的源,把字符输出流作为BufferedWriter的目的地,

那么BufferedReader类BufferedWriter类创建的流将比字符输入输出

流有更强的读写能力,例如BufferedReader流

就可以按行读取文件。

BufferedReader类和BufferedWriter类的构造方法分别为:

BufferedReader(Reader in);

BufferedWriter(Writer out);

用BufferedReader的readLine()方法可以读取一行的。关于缓冲流的使用还有很多,请大家参阅API文档

好了,第一次写博客,竟然写了一下午,希望能对java初学者有帮助!

 

 


分享到:
评论

相关推荐

    Java流总结

    流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输 ...Java IO流对象 1.输入字节流InputStreamIO 中输入字节流的继承图可见上图,可以看出:

    java数据流总结

    java数据流总结,java io流总结,节点流和处理流 java数据流总结,java io流总结,节点流和处理流 java数据流总结,java io流总结,节点流和处理流

    Java io流总结

    Java io流的总结

    JAVA_IO流学习总结

    JAVA_IO流学习总结

    JavaIO总结

    有关Java输入输出流的总结有关Java输入输出流的总结有关Java输入输出流的总结

    Java IO流 总结

    Java IO流总结 Java IO流是Java语言中最基本和最重要的输入/输出机制,负责将数据从外部世界输入到Java应用程序中或将数据从Java应用程序输出到外部世界。IO流可以分为两大类:字节流和字符流。 1. 节点流:离数据...

    java IO流总结.md

    java I/O流的总结 1.操作数据单位:字节流、字符流 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理 2.数据的流向:输入流、输出流 ...

    《JAVA_IO流学习总结》

    总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...

    java流IO总结

    ### Java IO流详解 #### 一、概述 Java的I/O操作主要涉及使用Java语言进行输入和输出操作。Java的所有I/O机制都是基于数据流来进行输入输出,这些数据流表示了字符或字节数据的流动序列。理解Java的I/O模型对于...

    JavaIO流详细总结

    下面是对Java IO流的详细总结: 1. 流的概念: 流是一种抽象的数据传输方式,可以将数据从一个地方传输到另一个地方。Java中的流分为输入流和输出流,分别用于读取和写入数据。流按照处理数据的不同类型,又可以...

    Java数据流编程

    ### Java 数据流编程详解 #### 一、引言 在Java编程中,数据流是处理文件输入输出的基础技术之一。本文将重点介绍几种常见的数据流操作方式:单字节流复制、字节数组流复制以及缓冲流复制,并通过具体的代码示例来...

    JAVA的IO流总结

    java的IO流总结:包含Inputstream,OutputStream,writer和reader

    java 技术总结.--java 技术

    Java的I/O库提供了丰富的类和方法用于文件操作、流处理和网络通信。Socket编程是Java进行网络通信的主要方式,支持TCP/IP协议。 六、多线程 Java内置了对多线程的支持,通过Thread类和Runnable接口可以创建并管理多...

    java流详细介绍

    ### Java流详细介绍 在Java编程语言中,流(Stream)是一种用于处理输入输出(I/O)操作的基础概念。Java中的流主要分为两大类:字节流(如InputStream和OutputStream)和字符流(如Reader和Writer)。这两种类型的...

    JAVAIO流学习总结(转)

    这是别人总结的很有实用价值的javaIO流教程。

    java基础总结资料

    9. **IO流**:Java的IO流处理能力强大,包括字符流和字节流,支持读写文件、网络通信等操作。 10. **多线程**:Java支持多线程编程,通过`Thread`类或者实现`Runnable`接口创建线程。同步机制(如`synchronized`...

    Java IO流总结

    Java IO流是Java平台中处理输入输出操作的核心组件,它允许程序与各种数据源(如文件、设备、网络连接)进行交互。IO流系统由多个类和接口组成,它们位于java.io包中,为开发者提供了读写数据的丰富功能。在Java中,...

    javaIO流知识大总结

    在这个大总结中,我们将深入探讨Java IO流的基本概念、分类、常用类以及实践应用。 1. **基本概念** - **流(Stream)**:在Java中,流是一个抽象的概念,代表数据的有序序列。它可以是字节流或字符流,流向可以是...

    Java流和文件总结(二)

    在本文中,我们将深入探讨Java流和文件处理的一些关键知识点。 首先,流是Java中的一个抽象概念,它代表了数据的有序传输。流可以是字节流(处理原始字节数据)或字符流(处理Unicode字符)。Java提供了许多类来...

Global site tag (gtag.js) - Google Analytics