Java入门学习第十五天——Java常用工具之IO流(异常、字符流、字节流、File类)

49 篇文章 0 订阅
21 篇文章 0 订阅

Java常用工具之IO流

根据API文档使用步骤查找并使用IO流体系中的类:

1.查找输入/输出流类

2.查看构造方法

3.创建输入/输出流对象

4.处理异常

5.读/写操作

6.关闭输入/输出设备

异常

异常:即非正常情况,通俗地说,异常就是程序出现的错误

异常的分类(Throwable 父类)

异常(Exception 子类):合理的应用程序可能需要捕获的问题(可预料的),这个才是需要我们处理的异常

如:NullPointerException(空指针异常)

错误(Error 子类):合理的应用程序不应该试图捕获的问题(不可预料的),不需要我们处理

如:StackOverFlowError(栈内存溢出)

异常的处理方式

JVM默认的异常处理方式:在控制台打印错误信息,并终止程序

开发中异常的处理方式:

1.try…catch(finally):捕获,自己处理

try {

​ //尝试执行的代码

} catch(Exception e) {

​ //出现可能的异常之后的处理代码

} finally {

​ //一定会执行的代码,如关闭资源,这里的代码正常情况下一定会执行,一般是用来释放资源的

}

特点:处理完异常之后程序会继续执行

package io.demo;

public class Test {
    public static void main(String[] args) {
        try {
//            尝试要执行的代码
            int a = 40 / 10;
            System.out.println(a);
            return;
        }catch (Exception e) {
//            出现异常之后的处理的代码
            System.out.println("被除数不能为0");
            return;           //结束方法
        }finally {              //即使try…catch中有return,finally里边的代码也会执行
            System.out.println("看看我能出现吗");
        }
//        System.out.println("看看我能出现吗");
    }
}
执行流程:

先执行try{}中的内容,看是否有问题(异常);没有:就直接执行finally语句中的内容;有:跳转到**catch(){}语句中开始执行,再执行finally{}**语句中的内容

2.throws:抛出,交给调用者处理

public void 方法名() throws Exception {

}

package io.demo;
//特点:执行结束之后,程序不再执行
public class Test2 {
    public static void main(String[] args) throws Exception {
//       调用show方法
//        因为show方法以及抛出一个异常,作为调用者(main函数)必须处理这个异常
//        方案一接着抛,main函数抛给jvm
//        show();
//        方案二:try…catch处理
        try {
            show();
        } catch (Exception e) {
            System.out.println("代码出问题了");
        } finally {
            System.out.println("看看我执行了吗");
        }

    }
    public static void show() throws Exception {
        int a = 20 / 0;
        System.out.println("a:"+a);
    }
}
IO流概述

IO流:I/O,即输入(Input)输出(Output),IO流指的是数据像连绵的流体一样进行传输。用来进行数据传输的一项技术

IO流能干什么:在本地磁盘和网络上操作数据

IO流的分类:

按数据流向分:输入流(读取数据);输出流(往外写数据);

按操作方式分:

字节流:InputStream(字节输入流);OutputStream(字节输出流)

字符流:Reader(字符输入流);Writer(字符输出流)

IO流体系

字符流:按字符读写数据的IO流

Reader(抽象类)

子类:FileReader(普通字符输入流);BufferedReader(高效字符输入流)

Writer(抽象类)

子类:FileWriter(普通字符输出流);BufferedWriter(高效字符输出流)

字节流:按字节读写数据的IO流

InputStream(抽象类)

子类:FileInputStream(普通字节输入流);BufferedInputStream(高效字节输入流)

OutputStream(抽象类)

子类:FileOutputStream(普通字节输出流);BufferedOutputStream(高效字节输出流)

src右键—>File

IO流简介:
    概述:
        I(Input,输入)/O(Output,输出)流,是java中用来传输数据的方式
    划分:
    按照流向分:
        输入流:读数据

        输出流:写数据

    按照操作分:
        字节流:以字节为单位来操作数据
            InputStream:字节输入流的顶层抽象类
                FileInputStream:普通字节输入流
                BufferedInputStream:高效字节输入流(也叫:字节缓冲输入流)

            OutputStream:字节输出流的顶层抽象类
                FileOutputStream:普通字节输出流
                BufferedOutputStream:高效字节输出流(也叫:字节缓冲输出流)

        字符流:以字符为单位来操作数据
            Reader:字符输入流的顶层抽象类
                FileReader:普通字符输入流
                BufferedReader:高效字符输入流(也叫:字父缓冲输入流)

            Writer:字符输出流的顶层抽象类
                FileWriter:普通字符输出流
                BufferedWriter:高效字符输出流(也叫:字符缓冲输出流)
File类

概念:文件,文件夹,一个File对象代表磁盘上的某个文件或文件夹;就是用来操作文件(夹)路径的

构造方法:

File(String pathname)

File(String parent,String child)

File(File parent,String child)

有了构造方法就有了对象,有了对象就可以调用成员方法了

成员方法

创建功能:

createNewFile():创建文件

mkdir():创建单级目录

mkdirs():创建目录

判断功能:

isDirectory():判断File对象是否为目录

isFile():判断File对象是否是文件

exists():判断File对象是否存在

要自行在项目下创建一个文件夹:右键项目—>new—>Directroy
文件夹下创建一个文件夹:右键文件夹—>new—>Directroy
文件夹下创建一个文件:右键文件夹—>new—>File

package io.demo;

import java.io.File;
import java.io.IOException;

/*
    构造方法
    File(String pathname)
    File(String parent,String child)
    File(File parent,String child)
    成员方法:
    创建功能:如果不存在就创建,返回true;否则就不创建,就返回false
    createNewFile():创建文件
    mkdir():创建单级目录
    mkdirs():创建多级目录(也可创建单级目录)
    make directory的缩写
    判断功能:
    isDirectory:判断File对象是否为目录
    isFile():判断File对象是否是文件
    exists():判断File对象是否存在
 */
public class Test3 {
    public static void main(String[] args) throws IOException {
//        需求:将D:\abc\1.txt封装成File对象
//        方式一:根据字符串形式的路径获取File对象
        File file1 = new File("D:\\abc\\1.txt");     //D:\abc\1.txt=D:/abc/1.txt
        System.out.println("file1:"+file1);
//        方式二:根据字符串形式的父目录以及子目录创建File对象
        File file2 = new File("D:/abc","1.txt");
        System.out.println("file2:"+file2);
//      方式三:根据父目录对象,以及字符串形式的子目录来获取File对象
        File file3 = new File("D:/abc");
        File file4 = new File(file3,"1.txt");
        System.out.println("file4:"+file4);
        System.out.println("——————————");

//        在D盘下创建2.txt文件
        File file5 = new File("d:/2.txt");
        boolean flag = file5.createNewFile();
        System.out.println("flag:"+flag);//第一次打印,是true,说明已经创建成功,再打印一次,是false,因为已经存在了
//        需求:在D盘下创建一个a文件夹
        File file6 = new File("D:/a");
        boolean mkdir = file6.mkdir();
        System.out.println("file6:"+mkdir);
//        需求:在D盘下创建a/b/c文件夹(创建嵌套的文件夹)
        File file7 = new File("D:/a/b/c");
        boolean mkdirs = file7.mkdirs();
        System.out.println("mkdirs:"+mkdirs);

        System.out.println("————————");
        System.out.println("测试判断功能");

        File file8 = new File("D:/a/b");
        System.out.println("判断file8是否为文件夹:"+file8.isDirectory());
        System.out.println("判断file8是否为文件:"+file8.isFile());
        System.out.println("判断file8是否为存在:"+file8.exists());
    }
}

获取功能:

getAbsolutePath():获取绝对路径

getPath():获取文件的相对路径

getName():获取文件名

list():获取指定目录下所有文件(夹)名称数组。(返回值是String类型)

listFile():获取指定目录下所有文件(夹)File对象数组

绝对路径:以盘符开头的路径,固定的,写“死”的路径;例如:D:/1.txt

相对路径:一般是相对于当前项目的路径来说的;例如:1.txt

package io.demo;

import java.io.File;

/*
    获取功能:
    getAbsolutePath():获取绝对路径
    getPath():获取文件的相对路径
    getName():获取文件名
    list():获取指定目录下所有文件(夹)名称数组。(返回值是String类型)
    listFile():获取指定目录下所有文件(夹)File对象数组
 */
public class Text4 {
    public static void main(String[] args) {
        File file1 = new File("lib/1.txt");
//        获取file1的绝对路径
        String abs = file1.getAbsolutePath();
        System.out.println("file1的绝对路径:"+abs);
//        获取file1的相对路径
        String path = file1.getPath();
        System.out.println("file1的相对路径:"+path);
//        获取文件名
        String name = file1.getName();
        System.out.println("file的文件名为:"+name);
//        获取lib文件夹下所有的文件(夹)的名称数组String[]
        File file2 = new File("lib");
        String[] names = file2.list();      //这获得的是名字
        for (String s : names) {
            System.out.println("名称为:"+s);
        }

        System.out.println("——————————————————");
//        获取lib文件夹下所有的文件(夹)的File对象数组File[]
        File[] files = file2.listFiles();       //这获得的是一个对象,可以调用
        for (File file : files) {
//            System.out.println("File对象:"+file);
            System.out.println("File对象:"+file.exists());
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值