黑马程序员---Java基础---字节流和字符流

来源:互联网 发布:php员工管理系统源代码 编辑:程序博客网 时间:2024/06/10 06:15

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 


一、字节流

1、IO流概述:

IO流用来处理设备之间的数据传输,上传文件和下载文件

Java对数据的操作是通过流的方式

Java用于操作流的对象都在IO包中

2、IO流分类:

按照数据流向

输入流 读入数据

输出流 写出数据

按照数据类型

字节流

字符流

3、IO流的层次结构

字节流:可以操作二进制文件、文本文件

1).输出流:OutputStream(抽象类)

FileOutputStream(类):

2).输入流:InputStream(抽象类)

FileInputStream(类):

字符流:只能操作文本文件

1).输出流:Writer(抽象类)

2).输入流:Reader(抽象类)


二、字节流

1、字节输出流 FileOutputStream

构造方法:文件可以不存在,会自动创建

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

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

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

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

输出的方法:

write(int n):输出一个字节;

write(byte[] b):输出一个字节数组;

write(byte[] b,int off,int len):输出一个字节数组的一部分;

成员方法

close():关闭流

package cn.hebei.sjz_字节输出流;import java.io.File;import java.io.FileOutputStream;/* * FileOutputStream构造方法 */public class Demo {public static void main(String[] args) {try {// 构造方法1FileOutputStream out = new FileOutputStream("demo3.txt");// 构造方法2// File file = new File("demo.txt");// FileOutputStream out = new FileOutputStream(file);// 构造方法3FileOutputStream out2 = new FileOutputStream("demo2.txt", true);// 构造方式4// File file = new File("demo2.txt");// FileOutputStream out2 = new FileOutputStream(file,true);// 输出一个字节out.write(97);//a// 追加写入out2.write("你好".getBytes());out2.write("我好".getBytes());out2.write("\r\n".getBytes());// 输出一个字节数组byte[] byteArray = { 97, 98, 99 };out.write(byteArray);// 输出字节数组的一部分out.write(byteArray, 1, 2);// 输出字符串out.write("我是谁".getBytes());// 释放资源out.close();out2.close();} catch (Exception e) {e.printStackTrace();}}}


2、字节输入流 FileInputStream

构造方法:文件必须存在,否则运行时异常;

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

FileInputStream(File file) :通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。 

读取的方法:

int read():读取一个字节

int read(byte[] byteArray):读取若干个字节,填充参数的byte[]数组;

package cn.hebei.sjz_字节输入流;import java.io.File;import java.io.FileInputStream;/* * 字节输入流  FileInputStream */public class Demo {public static void main(String[] args) {try {// 构造方法1FileInputStream in = new FileInputStream("demo3.txt");// 构造方法2// File file = new File("demo2.txt");// FileInputStream in = new FileInputStream(file);// 一次读取一个字节/* * int n = in.read(); while (n != -1) { System.out.println("读取的字节" + * n); System.out.println("转换为字符" + (char)n); n = in.read(); */// 另一种写法/*int n = 0;while ((n = in.read()) != -1) {System.out.println("读取的字符" + (char) n);}*///一次读取一个字节数组byte[] byteArray = new byte[4];int n = in.read(byteArray);while(n != -1){System.out.println("读取的内容:" + new String(byteArray,0,n));n = in.read(byteArray);}//第二种常用的遍历方法/*byte[] byteArray = new byte[4];int n = 0;while((n = in.read(byteArray)) != -1){System.out.println("读取的内容:" + new String(byteArray,0,n));}*/// 释放资源in.close();} catch (Exception e) {e.printStackTrace();}}}


三、字节缓冲流
1、BufferedOutputStream(类--缓冲字节输出流):

构造方法:

BufferedOutputStream(OutputStream out) :

输出的方法:

无特有的,都是继承的:三种输出的方法

2、BufferedInputStream(类--缓冲字节输入流):

构造方法:

BufferedInputStream(InputStream in):

读取的方法:

无特有的,都是继承的:两种读取的方法

package cn.hebei.sjz_缓冲流;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/* * 缓冲输出字节流BufferedOutputStream * 缓冲输入字节流BufferedInputStream */public class Demo {public static void main(String[] args) throws IOException {// 缓冲输出字节流BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("demo2.txt"));out.write("nihao".getBytes());out.write("wohao".getBytes());out.close();// 缓冲输入字节流BufferedInputStream in = new BufferedInputStream(new FileInputStream("demo2.txt"));// 一次读取一个字节/* * int n = 0; while ((n = in.read()) != -1) { System.out.println("读取的字节" * + n); } */// 一次读取一个字节数组byte[] byteArray = new byte[1024];int n = 0;while ((n = in.read(byteArray)) != -1) {System.out.println(new String(byteArray, 0, n));}in.close();}}


四、转换流

字符输出流  OutputStreamWriter(类--转换流):是字符流通向字节流的桥梁

构造方法:

OutputStreamWriter(OutputStream s):使用平台默认字符集

输出的方法(五种):

1).write(int n):输出一个字符

2).write(char[] c):输出一个字符数组

3).write(char[] c ,int off, int len):输出字符数组的一部分;

4).write(String str):输出一个字符串

5).write(String str,int off, int len):输出字符串的一部分;

字符输入流   InputStreamReader(类--转换流):是字节流通向字符流的桥梁

构造方法:

InputStreamReader(InputStream in):使用平台默认字符集

读取的方法(两个):

int read():读取一个字符:返回值:读取的"字符"

int read(char[] c):读取一个字符数组;返回值:读取的"字符数量"

package cn.hebei.sjz_字符转换流;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;/* * 字符转换输出流   OutputStreamWriter * 字符转换输入流   InputStreamReader */public class Demo {public static void main(String[] args) throws IOException {// 字符输出流OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("demo2.txt"));// 输出一个字符out.write('a');// 输出一个字符数组char[] charArray = { 'a', 'b', 'c' };out.write(charArray);// 输出一个字符数组的一部分out.write(charArray, 1, 2);// 输出一个字符串out.write("zheshishui");// 输出一个字符串的一部分String s = "zheshiwo";out.write(s, 2, 2);out.close();// 字符输入流InputStreamReader in = new InputStreamReader(new FileInputStream("demo2.txt"));/* * int n = 0; while ((n = in.read()) != -1) { System.out.println(n); } */char[] charArray1 = new char[2];int n = 0;while ((n = in.read(charArray1)) != -1) {for (char c : charArray1) {System.out.println(c);}}}}


五、字符流

FileWriter(类--纯字符流):

构造方法:

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

2).FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。 

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

4).FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 

输出的方法:

无特有方法,都是继承:五种

FileReader(类--纯字符流):

构造方法:

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

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

读取的方法:

无特有方法,都是继承:两种

package cn.hebei.sjz_字符流;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/* * 字符流复制文件 */public class Demo {public static void main(String[] args) throws IOException {FileReader in = new FileReader("Demo.txt");FileWriter out = new FileWriter("Demo_copy.txt");//一次写一个字符/*int n = 0;while((n = in.read()) != -1){out.write(n);}*///一次写一个字符数组char[] charArray = new char[1024];int n1 = 0;while((n1 = in.read(charArray)) != -1){out.write(charArray,0,n1);}in.close();out.close();System.out.println("程序结束");}}


六、字符缓冲流

BufferedWriter(字符流--缓冲流):

构造方法:

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

输出方法:

无特有方法,都是从父类继承的:五种

特有成员方法:

void newLine():输出一个换行符;

BufferedReader(字符流--缓冲流):

构造方法:

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

读取的方法:

继承父类:两种

String readLine():读取一行数据(不读取换行符)

<pre name="code" class="java">package cn.hebei.sjz_字符缓冲流;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/* * 字符缓冲流 */public class Demo {public static void main(String[] args) throws IOException {// 使用缓冲流复制文件BufferedReader in = new BufferedReader(new FileReader("demo2.txt"));// 输出流BufferedWriter out = new BufferedWriter(new FileWriter("demo2.txt"));// 一次写一个字符int n = 0;while ((n = in.read()) != -1) {out.write(n);}// 一次读写一个字符数组char[] charArray = new char[1024];int len = 0;while ((len = in.read(charArray)) != -1) {out.write(charArray, 0, len);}// 一次读写一行String row = null;while ((row = in.readLine()) != null) {out.write(row);out.newLine();// 换行符}in.close();out.close();}}


0 0
原创粉丝点击