IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JAVA高级特性(六)——IO流(第一讲) -> 正文阅读

[Java知识库]JAVA高级特性(六)——IO流(第一讲)

一、File 类概述和构造方法

? ? ? ? File:它是文件和目录路径名的抽象表示

? ? ? ? ? ? ?**文件和目录时可以通过File封装成对象;

? ? ? ? ? ? ?** 对于File而言,其封装的并不是一个真正的存在的文件,仅仅是一个路径名而已,它可以是存在的,也可以是不存在的。将来是 要通过具体的操作把这个路径的内容转换为具体存在的。

?1.1 构造方法

构造方法名

说明

File(String pathname)

通过将给定的路径名字符串转换为抽象路径名来创建新的File实例

File(String parent,String child)

从父路径名字符串和子路径名字符串创建新的File实例

File(File parent,String child)

从父抽象路径名和子路径名字符串创建新的File实例

public class Atest {
    public static void main(String[] args) {
        File f1=new File("E:\\aaa\\sss.java");
        System.out.println(f1);
        File f2=new File("E:\\aaa","sss.java");
        System.out.println(f2);
        File f3=new File("E:\\aaa");
        File f4=new File(f3,"sss.java");
        System.out.println(f4);
        //输出结果
        //E\aaa\sss.java
        //E\aaa\sss.java
        //E\aaa\sss.java
    }
}

1.2 创建目录的方法

创建目录的方法

说明

public boolean createNewFile() 创文件

当具有该文件的文件名不存在时,床技安一个由该抽象路径名命名的新空文件

public boolean mkdir() 创文件夹

创建由此抽象路径名命名的目录

public boolean mkdirs() 创多层文件夹

创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录

补充一个命令: getparentFile()? ?获得该目录的父类对象

public class Atest {
public static void main(String[] args) throws IOException {
    File f1 = new File("E:\\aaaa\\sss.java");
    //判断是否目录存在
    if (!f1.exists()) {
        File f = f1.getParentFile();//获得父级文件目录
        if (!f.exists())
            f.mkdirs();
    }//创建多级目录
    f1.createNewFile();
    //先找到aaaa文件,然后在其下创建文件sss.java
    //存在sss文件,则返回flase
    //不存在,则创建并返回true    //以下同这一条
}
}

1.3 File 类判断和获取功能

方法名

说明

public boolean isDirectory();

测试此抽象路径名表示File是否为目录

public boolean isFile()

测试此抽象路径名表示File是否为文件

public boolean exists()

测试此抽象路径名表示的File是否存在

public String getAbsolutePath()

返回此抽象路径名的绝对路径名字符串,,,值得是完整路径

public String getPath()

将此抽象路径名转换为路径名字符串,,,指的是我们封装的路径,也就是new File定义的路径,(相对路径)

public String getName()

返回由此抽象路径名表示的文件或目录的名称

public String[] list()

返回此抽象路径名表示的目录中的文件和目录的名称字符串数组:输出文件夹名或文件名组成的数组

public File[] listFiles()

返回此抽象路径名表示的目录中的文件和目录的File对象数组:输出文件和文件夹的具体路径组成的File数组

public class Atest {
    public static void main(String[] args) throws IOException {
        File f1=new File("E:\\aaaa\\sss.java");
        f1.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.java
        File f5=new File("E:\\aaaa\\sss1.java");
        f5.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.java
        File f6=new File("E:\\aaaa\\sss2.java");
        f6.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.java
        File f7=new File("E:\\aaaa\\sss3.java");
        f7.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.java
        System.out.println(f1.isDirectory());//isDirectory()判断f1是否为目录
        System.out.println(f5.isFile());//isFile()判断f5是否为文件
        System.out.println(f1.exists());//exists()判断f1是否存在
        System.out.println(f1.getAbsolutePath());
        //getAbsolutePath()返回此路径名的绝对路径字符串
        // 也是用字符串的格式输出路径
        System.out.println(f1.getPath());  //获得封装的文件和文件名路径
        System.out.println(f1.getName());//获得文件或文件夹名
        File f0=new File("E:\\aaaa");
        //list 操作输出String集合
        String[] list = f0.list();
        for (String s : list) {
            System.out.println(s);
        //listFiles操作输出File类集合,
        File[] files = f0.listFiles();
        for (File file : files) {
            System.out.println(file);
      }}}}

1.6 File类删除功能

方法名

说明

public boolean delete()

删除由此抽象路径表示的文件或目录

注意:删除文件夹时,文件夹内有文件必须先删除才能删除这个文件夹

1.7 File类总结

? ?增:creatNewFile()、mkdir()、mkdirs()

? ?删:delete()、deleteOnExit() 指程序结束运行后删除

? ?改:renameTo()? ? ?将文件移动并改名称

? ?查:getName()? ? getPath()? ? getAbsolutePath()? ? getParentPath()? ? List()? ? ListFile()

二、IO流概述和分类

2.1 IO流概述和分类

? ? ? 2.1.1 IO流概述:

? ? ? ? ?IO:输入输出(INPUT,OUTPUT)

? ? ? ? 流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是数据传输;

? ? ? ? ?IO流:就是用来处理设备间数据传输问题的;

? ? ? ? ? ? ? ? ? ? ? ? ?常见的应用:文件复制、问价你上传、文件下载。

? ? ? ?2.1.2 IO流的分类

? ? ? ? ? ? ? ? ? ? ? 1、按照数据的流向:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 输入流:读数据;

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?输出流:写数据;

? ? ? ? ? ? ? ? ? ? ? 2、按照数据类型来分:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?字节流: 字节输入流和字节输出流

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?字符流: 字符输入流和字符输出流。

在什么情况下使用:

? ? ? ?如果数据通过Window自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流,否则使用字节流。如果不知道该使用哪种流,就使用字节流。

三、字节流 Stream

3.1 字节流写数据

? ? ? 字节: 1、数字和字母占一个字节;

? ? ? ? ? ? ? ? ? ?2、汉字: 如果是GBK编码 ——占2个字节;如果是UIF-8编码(idea中默认的编码)——占用3个字节

? ? ? 字节流抽象基类

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**InputSream:这个抽象类是表示字节输入流的所有类的超类

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**OutputStream:这个抽象类是表示字节输出流的所有类的超类

? ? ? ? ? ? ? ? ? ? ?子类名特点:子类名称都是以其父类名作为子类名的后缀。

3.1.1字节输出流:

? ? ? ? ? ? ? ? ? FileOutputStream:文件输出流用于将数据写入File

? 构造方法:

? ? ? ? ? ?FileOutputStream(String name):创建文件输出流以指定的名称写入文件

? ? ? ? ? ? FuliOutputStream(String name,boolean append )//追加写入对象,append为“true”则是追加写入类型,反之不是

? ? ? ? ? ? ?FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件

3.1.2?使用字节输出流写数据的步骤:

? ? ? ? 1、创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)

? ? ? ? 2、调用字节输出流对象的写数据方法;

? ? ? ? 3、释放资源 fos.close()(关闭此文件输出流并释放与此流相关联的任何系统资源)

3.1.3?字节流写数据的三种方式

方法名

说明

void write (int b)

将指定的字节写入此文件输出流

void write(byte[] b)

将b.length字节从指定的字节数组写入此文件输出流

void write (byte[] b,int off,int len)

从字节数组b的第off的索引开始写入,写len个元素数据

补充:快速获得字节数组的命令——String byte getBytes();

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Byte s="abcde".getBytes();

? ? ? ? ? ? ? ? ? ? ? ? 相当于: Byte[] s={97,98,99,100,101};

3.1.4?字节流写数据的两个小问题

? ? ? ? ? ? ? ? ?1、写完数据后加换行符:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? windows: "\t\n"; linux: "\n"; mac: "\r"

? ? ? ? ? ? ? ? ?2、字节流写数据如何追加:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 采用构造方式构造追加性质的对象:

? ? ? ? ————public FileOutputStream(String name,boolean append):创建文件输出流以指定的名称写入文件。如果第二个参数为true,则字节将写入文件的末尾而不是开头。

? ? ? ? ? ? ? ? ?3.1.4 字节流写数据加异常处理

? ? ? ? ? ? ? ? ?利用 try...catch 进行异常判断,

? ? ? ? ? ? ? ? ?finally:在异常处理时提供finally块来执行所有清除操作。比如说IO流中的释放资源;

特点是一定会执行,直到JVM虚拟机退出

3.2 字节流读数据 (都是通过ACSI码值转换的,没有数据默认恢复为-1)

? ? ? ? ? ? ? ? ?FileInputStream

? ? ? ? ? ? ? ?? 创建对象格式:FileInputStream fis=new FileInputStream(String string);

? ? ? ? ? ? ? ?? ?读取方法:1、一个字符一个读取;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2、一个字节数组的输出

? ? 3.2.1 读数据的命令

? ? ?public int read(); 返回值为-1时,则数据已经读完,利用这个返回值可以循环判断

FileOutputStream   fos=new  FileOutputStream(""E:oop20211105\\fos.txt");
FileInputStream   fis=new  FileInputStream(""E:oop20211105\\fos.txt");
byte[] b="abcde".getBytes();
fos.write(b); //将字节数组b写入文件fos中,写数据
if(fis!=nill){
    int a;
    while((a=fis.read)!=-1){    //读取的值为-1  则表示没有数据了
        System.out.print((char)a);  // 读取的数据是转换的ASCII值,
                                 //则利用char转回文件中的数据
    }
}
fis.close();
fos.close();  //释放空间

3.2.2 一次读字节数组的数据

? ? ? ? ? ? ? ?int read (byte[] b); 从该输入流读取最多b.length个字节数据到这个数组中,返回值为-1时代表以及读完。

? ? ? ? ? ? ? String(byte[] bytes,start,end); String 中的构造方法,是将字节数组转换为字符串输出

start表示其实的索引,end表示输出的索引长度

byte[] bys=new byte[5]; //定义一个字节数组,用于每次读取5个元素
int len;  //len表示读取的元素长度
if(fis!=null){
    while((len=fis.read(bys))!=-1){  //判断实际赌场字节的长度为-1,表示结束
        System.out.print(new String(bys,0,len)); //new String 是构造对象
    }
}
fis.close();
fos.close();

3.3 字节缓冲流

? ? ? ? 字节缓冲流: 为了提高读取速度

? ? ? ?1、BufferOutputStream:该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。

? ? ? ? 2、BuffteredInputSream:创建BufferedInputStream将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区根据需要从所包含的输入流中重新填充,一次性很多字节

构造方法:

? ? ? ? ?**字节缓冲输出流:BufferedOutputStream(OutputStream out)

? ? ? ? ?** 字节缓冲输入流:BufferedInputStream( InputStream in )

原因:字节缓冲流仅仅只是提供一个缓冲区,而真正的读写数据还是依靠基本的字节流对象进行处理。

? ?3.4? 总结字节流

字节流创建对象顺序:? 字节缓冲流—>字节流—>文件

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:41:57  更:2021-11-16 18:43:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:12:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码