概念
IO(input,output)流通俗来讲,包含输入输出流,对数据的输入、输出操作以流的形式,主要负责设备(内存到硬盘)之间数据传输,在java 这方面 简单来说 ,就是使用java代码来操作文件
输入(input):读取外部数据,从 硬盘 到 内存(程序 )中
输出(input):将内存(程序)中的数据 写入 硬盘中
了解了什么是输入,输出流, 现在我们来看流的划分:
按照操作数据单位不同来划分:字节流(8bit)、字符流(16bit)
读取类似txt文件,我们一般用字节流
读取类似图片,视频,我们一般用字符流
按照流向不同来划分: 输入流 、输出流
来看一张流划分图
字节流
字节流:一次只读取一个字节,常用于文件读写 (inputStream,outputStream)
举个例子:
假如现在有个需求,将磁盘中的文件读取到 程序中
前面我们了解到 , 由硬盘到内存的操作是 输入操作,文件的 输入操作我们通常使用 FileInputStream
我们先在电脑 磁盘 D盘 手动创建一个 文件 1.txt
在1.txt 里面随机输入一些内容
编写代码,打印到控制台
File f = new File("D:/1.txt");
try (FileInputStream fis = new FileInputStream(f)) {
byte[] bytes = new byte[(int) f.length()];
fis.read(bytes);
String str = new String(bytes, "UTF-8");
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
控制台结果:
现在反过来操作,从内存 到 硬盘 ,这就是输出操作 ,文件的输出操作我们一般使用 FileOutputStream
现在有个需求:在D盘的一个空文件2.txt 写入数据
//1. 创建对象
FileOutputStream out;
try {
out = new FileOutputStream("D:\\2.txt");
out.write("今天星期四".getBytes());
out.flush();//保存
out.close();//流有开就一定有关闭流
} catch (IOException e) {
e.printStackTrace();
}
程序成功运行,打开2.txt 里面就有了我们输入的内容:“今天星期四”
字符流
字符流通常用于二进制文件的读取,常见的图片,视频,音频 ,当然字符流也是可以读取纯文本的,而且相对来说比较友好
我们还是来读取 1.txt
//1.创建对象
FileReader reader;
try {
reader = new FileReader("D:/1.txt");
char [] chars = new char[1024];
//读取全部
int len;
while((len=reader.read(chars))>-1){
System.out.print(new String(chars,0,len));
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
输出结果:
缓冲流
我们前边出现的读取操作,都是使用数组来做媒介,这样会不会提高读写的效率呢?答案是肯定的,java 对此进行了封装,于是出现了 缓冲流 前缀 (buffered) 开发中主要使用
比如
BufferedReader BufferedWriter
BufferedInputStream BufferedOutputStream
现在我们还是读取1.txt的内容,可以这样写
FileReader reader;
try {
reader = new FileReader("d://1.txt");
BufferedReader bufReader = new BufferedReader(reader);
String str;
while((str = bufReader.readLine())!=null){
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
输出结果是一样的,但更加高效
来看看写的操作
FileWriter writer;
try {
writer = new FileWriter("D://3.txt");
BufferedWriter bufferedWriter = new BufferedWriter(writer);
bufferedWriter.write("向3.txt写的东西");
bufferedWriter.flush();
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
File 对文件的基本操作
- 获取文件名字
File file = new File("demo.txt");
String name = file.getName();
System.out.println(name);
- 获取文件的 绝对路劲
File file = new File("demo.txt");
String absolutePath = file.getAbsolutePath();
System.out.println(absolutePath);
- 获取文件相对路劲
File file = new File("demo.txt");
System.out.println(file.getPath());
- 删除文件
file.delete();//删除
file.deleteOnExit();//存在的时候,再删除
`
- 创建目录
file.mkdirs();
写在最后:
以上便是本期全部内容了~,更多资讯敬请关注公众号【Java资讯】,技术文通俗易懂,打开微信扫一扫