字节输入流:
InputStream
(抽象类,字节输入流的所有类的超类)---读取原始字节流,
请考虑使用FileInputStream
(1) |__FileInputStream
描述:从文件系统中的某个文件中获得输入字节,用于读取
诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
>FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,
该文件通过文件系统中的 File 对象 file 指定。
>FileInputStream(FileDescriptor fdObj)
通过使用文件描述符 fdObj 创建一个 FileInputStream,
该文件描述符表示到文件系统中某个实际文件的现有连接。(不常用)
>FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream,
该文件通过文件系统中的路径名 name 指定。
(2) |__BufferedInputStream
描述:在输入流上添加一些功能,即缓冲输入以及支持 mark 和
reset 方法的能力。
>BufferedInputStream(InputStream in)
通过in来引入输入流
>BufferedInputStream(InputStream in, int size)
创建具有指定缓冲区大小的 BufferedInputStream
并保存其参数,即输入流 in,以便将来使用。(不写时默认8192)
↓
|-----------------------------------------------------------------|
字节流和字符流之间数据交换的桥梁:InputStreamReader(InputStream in)
|-----------------------------------------------------------------|
↑
字符输入流:
Reader(抽象类,用于读取字符流的抽象类)
(1) |__BufferedReader
描述:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
>BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
>BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流。
(2) |__InputStreamReader
描述:是字节流通向字符流的桥梁
>InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。
>InputStreamReader(InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader。
>InputStreamReader(InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。
>InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
(2)[1]|__FileReader
描述:用来读取字符文件的便捷类
>FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader。
>FileReader(FileDescriptor fd)
在给定从中读取数据的 FileDescriptor 的情况下创建一个新FileReader。
>FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新 FileReader
[为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。]
例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
读写道理同样,下面是一个将一个文件夹中的文件复制到另一个文件夹的函数
private static void copyfiles(File srcPath, File destPath) throws IOException {
File[] files = srcPath.listFiles();
for(File file: files){
BufferedInputStream fr =
new BufferedInputStream(new FileInputStream(file));
File dest =
new File(destPath,file.getName());
BufferedOutputStream fw =
new BufferedOutputStream(new FileOutputStream(dest));
byte[] b = new byte[1024];
int ch = -1;
while((ch = fr.read(b))!=-1){
fw.write(b,0,ch);
}
System.out.println(">>"+file.getName()+"---------复制成功!");
fr.close();
fw.close();
}
}