提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
IO流
前言
IO流可以实现对外部操作系统的输入和输出,包括读写文件,文件拷贝,文件夹拷贝,上传下载…
一、IO流的分类
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
1.按照流向划分 :
以程序为中心:
输入流:从节点到 java 内存
输出流:从 java 内存到节点
2.按照单元划分 :
字节流 : 数据以字节为单位 -->处理数据是音频、视频、doc、文本等一切为字节流
字符流 : 数据以字符为单位 -->只能操作纯文本文件:
3.按照功能划分 :
节点流 : 真实做读入写出的流
处理流(功能流) : 增强节点流的功能,提高节点流的性能
以上的分类都是相辅相成的
二、IO流操作步骤
1.与数据源文件创建联系
代码如下:
File f = new File("D://1.txt");
2.创建输入、输出流
输入、输出字节流:
//FileInputStream(String name) 通过打开与实际文件的连接来创建FileInputStream ,该文件由文件系统中的路径名name命名。
//FileInputStream(File file) 通过打开与实际文件的连接来创建FileInputStream ,该文件由文件系统中的File对象file命名。
InputStream is = new FileInputStream("D://a.txt");
OutputStream op = new FileOutputStream(f,true);//true表示可以在原文件上追加
//byte[] readAllBytes() 从输入流中读取所有剩余字节。
byte[] data = is.readAllBytes();
System.out.println(new String(data));
输入、输出字符流:
Reader in = new FileReader("D://1.txt");
Writer ou = new FileWriter("D://09.txt");
3.读写操作
byte[] car = new byte[1024];
int len = -1; //记录每次读入到字节数组中数据个数,如果读取不到返回-1
while((len=is.read(car))!=-1){
//4.使用数据
System.out.println(new String(car,0,len));
}
4.使用数据,捕获异常
try (inputStream;outputStream){
byte[] car=new byte[1024];
int len =-1;
while((len= inputStream.read(car))!=-1){
outputStream.write(car,0,len);
}
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
5.(刷出)关闭
.flush();
.end()
三、文件的拷贝
3.1字节数组的拷贝
InputStream is = new FileInputStream("D://1.txt");
OutputStream os = new FileOutputStream("D://24.txt");
try (is;os){
byte[] car=new byte[1024];
int len =-1;
while((len= is.read(car))!=-1){
os.write(car,0,len);
}
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
3.2字符数组的拷贝
Reader in = new FileReader("D://1.txt");
Writer ou = new FileWriter("D://09.txt");
char[] car = new char[1024];
int len = -1;
while((len=in.read(car))!=-1){
ou.write(car,0,len);
}
ou.flush();
ou.close();
in.close();
}
四、 缓冲流Buffered :
提高节点流的读写效率
4.1 字节缓冲输入/输出流
Buffer_Char("D://2.txt","D://3.txt");
}
//字节缓存输入/输出流
public static void Buffer_Byte(String is,String os) throws IOException {
//1.创建流
InputStream inputStream = new BufferedInputStream(new FileInputStream(is));
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(os));
//2.读写
byte[] car = new byte[1024];
int len = -1;//以读取的每行内容
while((len=inputStream.read(car))!=-1){
outputStream.write(car,0,len);
}
//3.缓存
outputStream.flush();
//4.关闭
inputStream.close();
outputStream.close();
}
4.2 字符缓冲输入/输出流
public static void Buffer_Char(String iss,String oss) throws IOException {
BufferedReader in = new BufferedReader(new FileReader(iss));
BufferedWriter out = new BufferedWriter(new FileWriter(oss));
String massage = null;
while ((massage=in.readLine())!=null){//读取每行内容
out.write(massage);
out.newLine();
}
//刷出
out.flush();
//关闭
out.close();
in.close();
}