io流常用类及文件拷贝
i/o流体系
流编程三要素:数据源,目的地,交通工具
字节输出流
OutputStream 此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。
注意事项
追加写入利用FileOutputStream的带boolean append参数的构造器
notepad不能够识别/n这个换行符但是一般的编辑器可以,原因是notepad是Windows自带
Windows \r\n // ***存储会占两个字节
Linux \n
Mac \r
字节流处理换行符字符不方便,后期会有字符流
IO编程需要加入异常处理,并且需要在finally中释放资源
字节输入流
此抽象类是表示字节输入流的所有类的超类
注意事项
如果输入流文件不存在,会抛出异常
read()方法的特点
a.文件每次读取一个字节,读取一个字节之后会自动将文件指针向后移动一个字节单位
b.文件读取后返回的实际读取的字节内容
c.读取到文件末尾返回-1
文件字节流FileInputStream和FileOutputStream
该流是用来处理数据源或者目的地是文件的情况,可以通过该对流实现文件的拷贝
高效缓冲字节流 BufferedInputStream和BufferedOutputStream
该流用于提高字节流的读写效率,底层还是使用缓存字节数组的概念
转换流InputStreamReader和OutputStreamWriter
特点
该流可以具备字符流的功能
该流可以将字节流转换成字符流
该流可以处理编码解码问题
转换流InputStreamReader和OutputStreamWriter
特点
该流可以具备字符流的功能
该流可以将字节流转换成字符流
该流可以处理编码解码问题
文件字符流FileReader和FileWrter
该流和文件字节字节流类似,只不过该对流是用了处理字符文本文件的
高效字符流 BufferedReader和BufferedWriter
概述
该流用于提高字符流的读写效率,底层还是使用缓存字符数组的概念。
特点
具备字符流读写功能
具体写换行符,适配不同的操作系统 newLine()
能够读一行readLine()
能够提高字符流的效率
FileReader fr = new FileReader("xxx\\fr.txt");
char[] chs = new char[5];
int len = 0;
while ((len = fr.read(chs)) != -1) {
System.out.println(len);//数组里存的字符个数,一般等于数组长度,除非后面没有字符,换行符\r\n也算
System.out.println(chs);// fr.read(chs):将文件里的字符缓存进数组,一般存满
System.out.println(new String(chs, 0, len));//将数组里的字符转换为字符串输出
复制多级文件夹
public class Work6 {
public static void main(String[] args) throws IOException {
File file = new File("D:\\Demo");
final File file1 = new File("D:\\text");
hh(file,file1);
}
public static void hh(File socfile,File tarfile) throws IOException {
if (socfile.isDirectory()) {
File dir=new File(tarfile,socfile.getName());
dir.mkdirs();
for (File listFile : socfile.listFiles()) {
hh(listFile, dir);
}
}else {
File file= new File(tarfile,socfile.getName());
copyFile(socfile,file);
}
}
public static void copyFile(File socfile,File file){
try (final BufferedWriter bw = new BufferedWriter(new FileWriter(file));
final BufferedReader br = new BufferedReader(new FileReader(socfile))
){
int n=0;
char[] chs = new char[1024];
if ((n= br.read(chs))!=-1) {
bw.write(chs,0,n);
bw.flush();
}
bw.close();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
IO流核心框架总结
字节流: 万能流,既能够处理二进制文件也能够处理文本文件,但是处理文本文件不是很方便,可以通过转换流转换成字符流
InputStream 抽象类
读一个字节
读一个字节数组
读一个字节数组的一部分
FileInputStream
1.能够读文件
FiterInputStream
1.没有扩展的功能
2.但是是一个普通类,可以直接使用,但是需要通过构造方法传入一个字节流
BufferedInputStream
1.提高了字节输入流的效率
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in, int size)
OutputStream 抽象类
写一个字节
写一个字节数组
写一个字节数组的一部分
FileOutputStream
1.能够写文件
2.能够追加写入
FiterOutputStream
1.没有扩展的功能
2.但是是一个普通类,可以直接使用,但是需要通过构造方法传入一个字节流
BufferedOutputStream
1.提高了字节输出流的效率
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out, int size)
字节流文件拷贝
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcfileName));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(descFileName));
int len = 0;
byte[] bys = new byte[1024];
while((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
bis.close();
bos.close();
字符流
Reader 【抽象类】
读一个字字符
读一个字符数组
读一个字符数组的一部分
InputStreamReader
1.能够将字节流转换成字符流
InputStreamReader(InputStream in)
2.处理编码问题
InputStreamReader(InputStream in, String charsetName)
3.能够具备字符流的功能
FileReader
1.能够读文件
BufferedReader
1.能够读一行
2.提高字符输入流的效率
Writer 【抽象类】
写一个字节
写一个字节数组
写一个字节数组的一部分
写一组字符串
写一组字符串的一部分
追加写入一组字符序列
追加写一组字符序列的一部分
OutputStreamWriter
1.能够将字节流转换成字符流
OutputStreamWriter(OutputStream in)
2.处理编码问题
OutputStreamWriter(OutputStream in, String charsetName)
3.能够具备字符流的功能
FileWriter
1.能够写文件
BufferedWriter
1.能够写是适配操作系统的换行符
2.能够提高字符输出流的效率
字符流文件拷贝
BufferedReader br = new BufferedReader(new FileReader(srcFileName));
BufferedWriter bw = new BufferedWriter(new FileWriter(descFileName));
char[] chs = new char[1024];
int len = 0;
while((len = br.read(chs)) != -1) {
bw.write(chs, 0, len);
bw.flush();
}
br.close();
bw.close();
BufferedReader br = new BufferedReader(new FileReader(srcFileName));
BufferedWriter bw = new BufferedWriter(new FileWriter(descFileName));
String line = null;
whlie((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
本文地址:https://blog.csdn.net/m0_47423338/article/details/109563780