IO流技术

Java.io包:

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

说明
File文件类
InputStream字节输入流
OutputStream字节输出流
Reader字符输入流
Writer字符输出流   
Closeable关闭流接口
Flushable刷新流接口
Serializable序列化接口

 

 

 

 

 

 

 

 

 

 

 

 

 


 流分类:

  1. 输入流:数据源到程序(InputStream、Reader读进来)。
  2. 输出流:程序到目的地(OutputStream、Writer写出去)。
  3. 节点流:可以直接从数据源或目的地读写数据。
  4. 字节流:按照字节读取数据(InputStream、OutputStream)。
  5. 字符流:按照字符读取数据(Reader、Writer)。

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

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

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

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

 

package com.company;

import java.io.File;

/**
 * author Gsan
 */
public class TestMkdirs {
    public static void main(String[] args){
        String path="C:/b/b/1.txt";
        File f=new File(path);
        boolean flag=f.mkdirs();
        System.out.println(flag);
    }
}

 

运行结果:


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

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

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

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

 

package com.company;

import java.io.File;

/**
 * author Gsan
 */
public class TestDirdelete {
    public static void main(String[] args) {
        //删除C盘目录下b目录
        deleteDir(new File("C:/b/b"));
    }

    private static boolean deleteDir(File dir) {
        if (dir.isDirectory()) {
            String[] c = dir.list();//要删除目录下的所有目录和文件
            for (int i = 0; i < c.length; i++) {
                boolean flag = deleteDir(new File(dir, c[i]));
                if (!flag) {
                    return false;
                }
            }
        }
        if(dir.delete()){
            System.out.println("目录删除成功");
            return true;
        }else{
            System.out.println("目录删除失败");
            return false;
        }
    }

}

 

 

 运行结果:


 IO控制台输入:

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

package com.company;

import java.io.*;

/**
 * IO控制台输入
 * 一个一个地读取字符
 * 用read();
 * author Gsan
 */
public class TestIOsystemin {


    public static void main(String[] args) throws IOException {

        char c=0;
        BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入字符,按下‘E’键退出");
        do{
            //一个一个地读取字符
            c= (char) bw.read();
            System.out.println(c);
        }while(c!='E');
    }
}

 

运行结果:


IO控制台输入字符串:

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

package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * IO控制台输入字符串
 * 读取字符串
 * 用readLine();
 * author Gsan
 */
public class TestIOsystemin2 {
    public static void main(String[] args) throws IOException {
        String str;
        BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入字符串:用字符串‘end’结束程序!");
        do{
            str=bw.readLine();
            System.out.println(str);
        }while(!bw.readLine().equals("end") );
    }
}

运行结果:

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


 从File源码了解File:

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

1.File(String):

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

例如:

 String path = "C:/用户/tanjianjie/project/io/a.txt";

        //构建File对象方法一
        File src=new File(path);

 

2.File(String,String):

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

例如:

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

 

3.File(File,String):

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

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

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

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


 


 

转载于:https://www.cnblogs.com/Gsan/p/10511774.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值