io流技术java_IO流技术

Java.io包:

Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。在整个java.io包中最重要的就是5个类和3个接口:

说明

File

文件类

InputStream

字节输入流

OutputStream

字节输出流

Reader

字符输入流

Writer

字符输出流

Closeable

关闭流接口

Flushable

刷新流接口

Serializable

序列化接口

流分类:

输入流:数据源到程序(InputStream、Reader读进来)。

输出流:程序到目的地(OutputStream、Writer写出去)。

节点流:可以直接从数据源或目的地读写数据。

字节流:按照字节读取数据(InputStream、OutputStream)。

字符流:按照字符读取数据(Reader、Writer)。

输入流、输出流的子类层次图:

2c9f890aa02ea16a53e7dbef2346ebb7.png

使用 File 类的 mkdirs() 、mkdir() 创建目录:

mkdir() :  创建此抽象路径名指定的目录,必须在有父类的文件夹下创建文件 。 mkdirs() :  创建此抽象路径名指定的目录。不确定此文件夹是否存在,不确定父文件夹存在。

使用 File 类的 mkdirs() 实现递归创建目录 演示:

packagecom.company;importjava.io.File;/*** author Gsan*/

public classTestMkdirs {public static voidmain(String[] args){

String path="C:/b/b/1.txt";

File f=newFile(path);boolean flag=f.mkdirs();

System.out.println(flag);

}

}

运行结果:

7c7e2b769c8105fc9646bfca6d6bb6fc.png

b245be4d8fb9468e9e5f8f0d822a20c2.png

使用 File 类的dir.isDirectory(), dir.list() 和 dir.isdelete() 方法删除目录:

boolean dir.isDirectory();是否目录,返回boolean型。

dir.list();目录存储在List容器。

boolean dir.isdelete();是否删除目录,返回boolean型。

packagecom.company;importjava.io.File;/*** author Gsan*/

public classTestDirdelete {public static voidmain(String[] args) {//删除C盘目录下b目录

deleteDir(new File("C:/b/b"));

}private static booleandeleteDir(File dir) {if(dir.isDirectory()) {

String[] c= dir.list();//要删除目录下的所有目录和文件

for (int i = 0; i < c.length; i++) {boolean flag = deleteDir(newFile(dir, c[i]));if (!flag) {return false;

}

}

}if(dir.delete()){

System.out.println("目录删除成功");return true;

}else{

System.out.println("目录删除失败");return false;

}

}

}

运行结果:

b2b7600a910706eb108da231d6520d71.png

3772083f8609d12fff9cc154148def6d.png

IO控制台输入:

每当IO控制台输入字符,需要一个一个地读取字符时,应调用BufferedReader缓冲流将字符读取到缓冲区,再调用read();去读取字符,此过程提高性能。

packagecom.company;import java.io.*;/*** IO控制台输入

* 一个一个地读取字符

* 用read();

* author Gsan*/

public classTestIOsystemin {public static void main(String[] args) throwsIOException {char c=0;

BufferedReader bw= new BufferedReader(newInputStreamReader(System.in));

System.out.println("请输入字符,按下‘E’键退出");do{//一个一个地读取字符

c= (char) bw.read();

System.out.println(c);

}while(c!='E');

}

}

运行结果:

dba60d7dbce31be80b42047c951a9afe.png

IO控制台输入字符串:

用控制台输入字符串然后再读取,同样调用缓冲流将字符串读取进缓冲区,再调用readLine()读取到及控制台,提高性能。

packagecom.company;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;/*** IO控制台输入字符串

* 读取字符串

* 用readLine();

* author Gsan*/

public classTestIOsystemin2 {public static void main(String[] args) throwsIOException {

String str;

BufferedReader bw=new BufferedReader(newInputStreamReader(System.in));

System.out.println("请输入字符串:用字符串‘end’结束程序!");do{

str=bw.readLine();

System.out.println(str);

}while(!bw.readLine().equals("end") );

}

}

运行结果:

9730a2d42eaf40db27deb3188ce07d81.png

这里解释一下用do-while循环而没有用while循环,因为do-while循环先先执行一次,再判断条件,而while先判断条件,再执行,那么我们的Enter回车也属于字符,假如用while就会把Enter也看做字符,这样就会陷进死循环,无法执行。

从File源码了解File:

f234c6fdacbbcc4a2c60510818b1d1cc.png

上图为File源码构造方法的导图,我们常用的是中间三种方法创建File对象,下面将着重分析这三种方法。

1.File(String):

c31dcdad350728a49af5a8dc21767520.png

用此方法创建File对象时,String部分的字符应是File的路径,且路径名不能为null。

例如:

String path = "C:/用户/tanjianjie/project/io/a.txt";//构建File对象方法一

File src=new File(path);

2.File(String,String):

bb438543ce48f8487d6680946dbb2d68.png

由上图分析可知,路径可分两部分,一部分是父路径,即是File的父目录;一部分是子路径,即是存在父目录下的File路径。

例如:

src=new File(new File("C:/用户/tanjianjie/project"),"io/a.txt");

3.File(File,String):

5b151c7f2de9e0ed6e471df6b2fdbff1.png

此方法与第二种方法类似。

File源码中还提供了多种获取方法和判断方法:

1e9515df60fcc38822c468ee65b5133d.png

01fb6b4b15f7fdd0ea54ed938d3f7332.png

获取名称、父路径、上级文件、路径、绝对路径等等。

判断文件是否存在、是否目录、是否文件、是否隐藏、是否绝对路径等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值