------- android培训、java培训、期待与您交流! ----------
字符流: Reader:用于读取字符流的抽象类。
子类必须实现的方法只有 read(char[], int, int) 和 close()。
|---BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或 者可使用默认的大小。大多数情况下,默认值就足够大了。
|---LineNumberReader:跟踪行号的缓冲字符输入流。此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于 设置和获取当前行号。
|---InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由 名称指定或显式给定,或者可以接受平台默认的字符集。
|---FileReader:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这 些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
|---CharArrayReader:
|---StringReader:
-------------------------------------------------
Writer:写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。
|---BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
|---OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的
charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平 台默认的字符集。
|---FileWriter:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。
|---PrintWriter:
|---CharArrayWriter:
|---StringWriter
字节流: InputStream:是表示字节输入流的所有类的超类。
|--- FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
|--- FilterInputStream:包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。 |--- BufferedInputStream:该类实现缓冲的输入流。
|--- Stream:
|--- ObjectInputStream:
|--- PipedInputStream
OutputStream:此抽象类是表示输出字节流的所有类的超类。
|--- FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
|--- FilterOutputStream:此类是过滤输出流的所有类的超类。
|--- BufferedOutputStream:该类实现缓冲的输出流。
|--- PrintStream:
|--- DataOutputStream:
|--- ObjectOutputStream:
|--- PipedOutputStream:
1.字节流操作图片
//使用流复制非纯文本文件
//
public static void main(String[] args) {
FileInputStream fis =null;
FileOutputStream fos=null;
try {
//字符输入流(需要copy文件源)
fis =new FileInputStream("path路径源");
//字符输出流(copy存放的目的地)
fos= new FileOutputStream("copy目的地");
//为了提高字符流缓冲技术,所以需要使用
//字符流缓冲区:BuffereInputStream BuffereInputStream
BufferedInputStream bfis=new BufferedInputStream(fis);
BufferedOutputStream bfos=new BufferedOutputStream(fos);
//读取流数组为1024个字节
byte[] buf = new byte[1024];
int len = 0;
//字节流判断读取数据是否读完,如果读完这返回-1
while ((len = bfis.read(buf)) != -1) {
/*写到目的文件————>第一个参数:把数据写到缓存数组。
第二个参数:从0个字节开始写
第三个参数:写到文件末尾
*/
bfos.write(buf, 0, len);
}
} catch (IOException e1) {
//抛出异常
throw new RuntimeException("读取文件失败");
} finally {
//在使用IO流的时候很容易产生IOException异常,所以每次用完流之后一定要close();
try {
if(fis!=null){
fis.close();
}
} catch (IOException e2) {
throw new RuntimeException("关闭字节输入流失败");
}
try {
if(fos!=null){
fos.close();
}
} catch (IOException e3) {
throw new RuntimeException("关闭字节输出流失败");
}
}
}
因为操作的是非纯文本文件,所以使用InputStreamOutpurStream中的FileInputStream、FileOutputStream对象操作图片文件
2.字符流操作文件
public static void main(String[] args) {
//使用流复制纯文本文件
// 因为操作的是纯文本文件,所以使用Reader、Writer中的FileReader、FileWriter对象纯文本文件
FileReader fir = null;
FileWriter fiw = null;
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
// 字节读取流(需要copy文件源)
fir = new FileReader("path路径源");
// 字节写入流(copy存放的目的地)
fiw = new FileWriter("path路径目的地");
// 为了提高字符流缓冲技术,所以需要使用
// 字符流缓冲区:BufferedReader BufferedWriter
bufr = new BufferedReader(fir);
bufw = new BufferedWriter(fiw);
// 读取流数组为1024个字节
byte[] buf = new byte[1024];
String len = null;
// 字节流判断读取数据是否读完,如果读完这返回null
while ((len = bufr.readLine()) != null) {
//写到目的文件
bufw.write(len);
}
} catch (IOException e1) {
// 抛出异常
throw new RuntimeException("读取文件失败");
} finally {
// 在使用IO流的时候很容易产生IOException异常,所以每次用完流之后一定要close();
try {
if (bufr != null) {
bufr.close();
}
} catch (Exception e2) {
throw new RuntimeException("关闭字节输入流失败");
}
try {
if (bufw != null) {
bufw.close();
}
} catch (Exception e3) {
throw new RuntimeException("关闭字节输出流失败");
}
}
}