文章目录
IO流的定义
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
比如大文本,用字符流就高一点,如果是文件的话,一般是用的字节流的。
IO 流的分类
1. 根据处理数据类型的不同分为:字符流和字节流
2. 根据数据流向不同分为:输入流和输出流
注意文件和目录的区别,我们创建的文件夹是目录,这个目录里面放了很多的文件,比如word文档,text文档,这些都是文件的,文件夹不是文件,是目录,是一个文件的集合!
Jdk中的File类
重点:
文件和目录路径名的抽象表示。 用户界面和操作系统使用依赖于系统的路径名字符串命名文件和目录。
这个类提供了一个抽象的,独立于系统的层次化路径名的视图。 抽象路径名有两个组件:
- 可选系统有关的前缀字符串,如磁盘驱动器符, "/“为UNIX根目录,或”\\"的Microsoft Windows UNC路径,
- 零个或多个字符串名称的序列。 抽象路径名中的第一个名称可能是目录名称,或者在Microsoft Windows
UNC路径名的情况下是主机名。 抽象路径名中的每个后续名称表示一个目录; 姓氏可以表示目录或文件。 空的抽象路径名没有前缀和空名称序列。
File类常用的方法
1,public boolean mkdir() 创建此抽象路径名指定的目录。
2,public boolean createNewFile() 创建一个文件
3,public boolean delete() 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。
4,public boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
5,public File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文 件。
6,public boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
接下来的对上面这些方法的实现中,都会有一个File file=new File(“目录或者文件的路径”);这个代码,这个代码怎么说呢,我的理解就是告诉计算机,我要有一个File操作了,你要准备了,并且,我操作的位置已经告诉你了,你要准备对这个位置的东西进行操作,其实这个位置没东西,也是可以对这里进行操作的,这个操作就是文件和目录的创建,这个位置有东西了,就可以实现遍历和删除等操作了。
创建目录,使用mkdir方法
代码:
package Java的IO流;
import java.io.File;
public class Demo1 {
public static void main(String[] args) {
File file=new File("G://IO的学习创建的目录");
boolean b=file.mkdir();//创建虚拟目录,创建成功返回True
if(b){
System.out.println("目录创建成功");
}else{
System.out.println("目录创建失败");
}
}
}
效果:
很明显可以看到是一个时间点生成的。
创建文件,使用createNewFile方法
代码:
package Java的IO流;
import java.io.File;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws IOException {
File file=new File("G://IO的学习创建的目录");
boolean b=file.mkdir();//创建虚拟目录,创建成功返回True
if(b){
System.out.println("目录创建成功");
file=new File("G://IO的学习创建的目录//Io流的学习.txt");
b=file.createNewFile();//这个得抛出异常
if(b){
System.out.println("文件创建成功!");
}
}else{
System.out.println("目录创建失败");
}
}
}
注意,这个运行的时候,一定要把上面创建的目录删掉,是不能在一个地方创建相同的目录的,我忘记删除,然后创建失败了,自己可以试一下,成功的效果如下:
否则,文件创建失败,忘记加了,觉得有问题的自己加,懒的弄了。。。
删除文件,使用delete()方法
注意:是不能直接删除目录的,必须要把目录中的文件清理干净了才能删除目录
代码
package Java的IO流;
import java.io.File;
public class Demo2 {
public static void main(String[] args) {
File file=new File("G://IO的学习创建的目录//Io流的学习.txt");
if(file.exists()){//判断文件或目录是否存在
boolean b=file.delete();//用于删除文件的
if(b){
System.out.println("文件删除成功");
}else{
System.out.println("文件删除失败");
}
file=new File("G://IO的学习创建的目录");
if(file.exists()){
boolean b2=file.delete();
if(b2){
System.out.println("目录删除成功");
}else {
System.out.println("目录删除失败");
}
}
}
}
}
注意:这个代码是Demo2,是和上面的Demo1配合的使用的,通过Demo1对文件和目录进行创建,在这里就用Demo2对文件和目录进行删除
效果:
遍历目录中的文件,使用listFiles()方法
实现对一个目录的遍历
代码
package Java的IO流;
import java.io.File;
public class Demo3 {
public static void main(String[] args) {
File file=new File("G://项目学习");
File files[]=file.listFiles();
for(int i=0;i<files.length;i++){
System.out.println(files[i]);
}
}
}
效果
看一下G盘中的东西
由于以前机械硬盘的损坏,做的项目都丢了,这是最近一个月重新搞的,,,咳咳,简单的看看,所以我们的遍历是实现了的。
重点:遍历一个目录下的所有目录和文件
重点来了,把一个目录中的所有文件都遍历出来,上面的遍历是把一个目录中的一层文件遍历出来
代码
package Java的IO流;
import java.io.File;
public class Demo4 {
public static void ListFile(File file){
if(file!=null){
if(file.isDirectory()){//如果是目录
System.out.println("**********");
System.out.println("当前是"+file+"目录,文件如下:");
File files[]=file.listFiles();//遍历这个目录
if(files!=null){//空文件夹的时候就是null
for(int i=0;i<files.length;i++){
ListFile(files[i]);//递归调用
}
}
}else if(file.isFile()){//如果是文件
System.out.println(file);
}
}
}
public static void main(String[] args) {
File file=new File("G://项目学习//一头扎进J2SE");
//把上面的这个项目中的所有的目录和文件都遍历出来
ListFile(file);
}
}
效果
两个图对比的看一下,我觉得,这个还是相当神奇的!!!一定要对递归有熟练的认识
IO流_inputStream(字节流)
带Stream的都是字节流
InputStream是输入流,我们在使用的时候,更多的都是用的inputStream的子类。
先创建一个测试文件,测试文件.txt,然后在测试文件中写一些内容,之后把测试文件中的东西读出来,现在要做的就是这件事
IO流_outStream(字节流)
reader(字节流)
writer(字节流)
字符流一般是处理文本文件的(text是文本文件,其他都不是)
IO场景分类
控制台IO
比如键盘的输入,主要是外部设备的输入,键盘把数据写到控制台上让IO流进行操作
控制台输出的实现(system.out.print)
文件IO
主要是对硬盘中的文本文件的读写。