Java学习:I/O流

时间:2023-02-14 23:53:22

字节输入流:InputStream(抽象类)

字节输出流:OutputStream(抽象类)

FileOutputStream为OutpuStream的子类

其中包括的构造方法为:

FileOutputStream(File file)
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

FileOutputStream(String name)
          创建一个向具有指定名称的文件中写入数据的输出文件流。

其中成员方法包括:

close()
          关闭此文件输出流并释放与此流有关的所有系统资源。

write(byte[] b)
          将 b.length 个字节从指定 byte 数组写入此文件输出流中。

write(byte[] b, int off, int len)
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。

write(int b)
          将指定字节写入此文件输出流。

FileOutputStream  fos = FileOutputStream("fos.txt");

 

fos.write("Hello World".getBytes());

fos.colse();

以上代码表示 将创建一个字节输出流对象fos指向文件fos.txt,创建fos.txt这个文件,然后将Hello World转换成byte类型然后写入到fos.txt文件中。

FileIntputStream是InputStream的子类

构造方法与FileOutputStream类似

FileInputStream(String name)
          通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

成员方法也类似

read()
          从此输入流中读取一个数据字节。

read(byte[] b)
          从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

read(byte[] b, int off, int len)
          从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。

close()
          关闭此文件输入流并释放与此流有关的所有系统资源。

实操:将一个文件复制到另一个另一个文件

代码如下

Java学习:I/O流Java学习:I/O流
 1 FileInputStream fis = new FileInputStream("OutputStreamDemo.java");
 2         FileOutputStream fos = new FileOutputStream("c.java");
 3         
 4         //2.读取数据源中的数据,将读取到的数据写入目的地中
 5         int by;
 6         while ((by=fis.read())!=-1) {
 7             //System.out.println(by);
 8             //将读取到的字节写入fos中
 9             fos.write(by);
10         }
11         
12         //释放资源
13         fos.close();
14         fis.close();
CopyFile

 字符缓冲区流(也叫高效流):

BufferedInputStream

构造方法:

BufferedInputStream(InputStream in)
          创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

成员方法:

继承了父类的read方法。

BufferedOutputStream

 

BufferedOutputStream(OutputStream out)
          创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

成员方法:

继承自父类的write()方法。

低级流:基本的流,可以直接操纵文件。

高级流:是操作基本流的流。

练习代码如下

Java学习:I/O流Java学习:I/O流
 1 //封装数据源和目的地
 2         BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D://b.mp4"));
 3         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("j.mp4"));
 4                 
 5         //一次读写一个字节数组
 6         byte[] byf = new byte[1024];
 7         int len;
 8         while ((len = bis.read(byf))!=-1) {
 9             bos.write(byf, 0, len);    
10         }
11         
12         
13         //3.关流
14         bos.close();
15         bis.close();
CopyMP4

 

字符流

Reader(抽象类)

Writer(抽象类)

InputStreamReader

构造方法:

InputStreamReader(InputStream in)

          创建一个使用默认字符集的 InputStreamReader。

成员方法:

read(char[] cbuf, int offset, int length)
          将字符读入数组中的某一部分。

OutputStreamWriter

OutputStreamWriter 是字符流通向字节流的桥梁

构造方法:

OutputStreamWriter(OutputStream out)

  创建使用默认字符编码的 OutputStreamWriter。

成员方法:

write(String str, int off, int len)
          写入字符串的某一部分。

write(char[] cbuf, int off, int len)
          写入字符数组的某一部分。

write(int c)
          写入单个字符

flush()
          刷新该流的缓冲。

FileReader和FileWriter分别为InputStreamReader和OutputStreamWriter的子类。

其构造方法为分别为

 

FileReader(File file)
          在给定从中读取数据的 File 的情况下创建一个新 FileReader

FileReader(String fileName)
          在给定从中读取数据的文件名的情况下创建一个新 FileReader

FileWriter(File file) 
          根据给定的 File 对象构造一个 FileWriter 对象。

FileWriter(String fileName) 
          根据给定的文件名构造一个 FileWriter 对象。

练习代码如下:

Java学习:I/O流Java学习:I/O流
 1     //1.封装数据源和目的地
 2         FileReader fr = new FileReader("InputStreamReaderDemo.java");
 3         FileWriter fw = new FileWriter("d.java");
 4         
 5         
 6         //一次读写一个字符数组
 7         char[] chs = new char[1024];
 8         int len;
 9         while ((len=fr.read(chs))!=-1) {
10             fw.write(chs, 0, len);
11             fw.flush();
12         }
13         
14         
15         //3.关流
16         fw.close();
17         fr.close();    
CopyFile

 

方法flush和close的区别

flush:刷新缓冲区,流对象可以继续使用。

close:先刷新缓冲区,再关闭流对象。流对象不可以再使用。

高效字符流:

BufferedReader:字符缓冲输入流

构造方法:

BufferedReader(Reader in)
          创建一个使用默认大小输入缓冲区的缓冲字符输入流。

特有方法:

readLine()
          读取一个文本行。

BufferedWriter:字符缓冲输出流

构造方法:

BufferedWriter(Writer out)
          创建一个使用默认大小输出缓冲区的缓冲字符输出流

特有方法:

newLine()
          写入一个行分隔符。

利用高效字符流一次复制一行的复制文件。

代码如下

Java学习:I/O流Java学习:I/O流
 1 BufferedReader br = new BufferedReader(new FileReader("InputStreamReaderDemo.java"));
 2         BufferedWriter bw = new BufferedWriter(new FileWriter("copy.java"));
 3         
 4         //读取一行写一行
 5         String line;
 6         while ((line = br.readLine())!=null) {
 7             //System.out.println();
 8             bw.write(line);
 9             bw.newLine();
10             bw.flush();
11         }
12         
13         //释放资源
14         bw.close();
15         br.close();
View Code