黑马程序员_学习记录15:IO流

来源:互联网 发布:新手怎么淘宝购物 编辑:程序博客网 时间:2024/06/07 08:32
------- android培训、java培训、期待与您交流! ----------

字符流和字节流:

字节流两个基类:

InputStream   OutputStream

字符流两个基类:

Reader Writer

先学习一下字符流的特点。

既然IO流是用于操作数据的,

那么数据的最常见体现形式是:文件。

那么先以操作文件为主来演示。

需求:在硬盘上,创建一个文件并写入一些文字数据。

找到一个专门用于操作文件的Writer子类对象。FileWriter。  后缀名是父类名。 前缀名是该流对象的功能。

*/

import java.io.*;

class  FileWriterDemo

{

public static void main(String[] args) throws IOException

{

//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。

//而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。

//其实该步就是在明确数据要存放的目的地。

FileWriter fw = new FileWriter("demo.txt");

调用write方法,将字符串写入到流中。

fw.write("abcde");

//刷新流对象中的缓冲中的数据。将数据刷到目的地中。

//fw.flush();

//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。将数据刷到目的地中。

//和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。


//C盘一个文本文件复制到D盘。

/*

复制的原理:

其实就是将C盘下的文件数据存储到D盘的一个文件中。

步骤:

1,在D盘创建一个文件。用于存储C盘文件中的数据。

2,定义读取流和C盘文件关联。

3,通过不断的读写完成数据存储。

4,关闭资源。

*/

import java.io.*;

class CopyText 

{

public static void main(String[] args) throws IOException

{

copy_2();

}

public static void copy_2()

{

FileWriter fw = null;

FileReader fr = null;

try

{

fw = new FileWriter("SystemDemo_copy.txt");

fr = new FileReader("SystemDemo.java");

char[] buf = new char[1024];

int len = 0;

while((len=fr.read(buf))!=-1)

{

fw.write(buf,0,len);

}

}

catch (IOException e)

{

throw new RuntimeException("读写失败");

}

finally

{

if(fr!=null)

try

{

fr.close();

}

catch (IOException e)

{

}

if(fw!=null)

try

{

fw.close();

}

catch (IOException e)

{

}

}

}

//C盘读一个字符,就往D盘写一个字符。

public static void copy_1()throws IOException

{

//创建目的地。

FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");

//与已有文件关联。

FileReader fr = new FileReader("RuntimeDemo.java");

int ch = 0;

while((ch=fr.read())!=-1)

{

fw.write(ch);

}

fw.close();

fr.close();

}

}

3、缓冲区

l

 

缓冲区的出现提高了对数据的读写效率。

 

对应类

• BufferedWriter

• BufferedReader

缓冲区要结合流才可以使用。在流的基础上对流的功能进行了增强。

l

字节流

基本操作与字符流类相同但它不仅可以操作字符,还可以操作其他媒体文件

转换流

l

 InputStreamReader,OutputStreamWriter

转换流的由来

• 字符流与字节流之间的桥梁

• 方便了字符流与字节流之间的操作

l

转换流的应用

• 字节流中的数据都是字符时,转成字符流操作更高效。

l

 

标准输入输出流

System类中的字段:inout

它们各代表了系统标准的输入和输出设备。默认输入设备是键盘,输出设备是显示器。 System.in的类型是InputStream.System.out的类型是PrintStreamOutputStream的子类FilterOutputStream 的子类.

流的基本应用小节

l

流是用来处理数据的。处理数据时,一定要先明确数据源,与数据目的地(数据汇)。数据源可以是文件,可以是键盘。数据目的地可以是文件、显示器或者其他设备。而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理.转换处理等。

File

l

用来将文件或者文件夹封装成对象方便对文件与文件夹的属性信息进行操作。 File对象可以作为参数传递给流的构造函数。

递归 

函数自己调用自己。

注意:递归时一定要明确结束条件。

应用场景:当某一功能要重复使用时。

IO包中的其他类

RandomAccessFile• 随机访问文件,自身具备读写的方法。

• 通过skipBytes(int x),seek(int x)来达到随机访问。

管道流• PipedInputStreamPipedOutputStream

• 输入输出可以直接进行连接,通过结合线程使用。

打印流 • PrintWriterPrintStream

• 可以直接操作输入流和文件。l

 序列流 • SequenceInputStream

• 对多个流进行合并。 

操作对象 • ObjectInputStreamObjectOutputStream

• 被操作的对象需要实现Serializable (标记接口);

操作基本数据类型• DataInputStreamDataOutputStream 

操作字节数组• ByteArrayInputStreamByteArrayOutputStream 

操作字符数组• CharArrayReaderCharArrayWritel

操作字符串• StringReader 与 StringWriter

------- android培训、java培训、期待与您交流! ----------
原创粉丝点击