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知识库 -> File类及I/O流讲解 -> 正文阅读

[Java知识库]File类及I/O流讲解

目录

一、Stream流

简介

分类

二、File类

概述

常用方法

代码详解

三、字节流

概述

文件输出流

文件输入流

字节缓冲流

四、字符流

概述

转换流

字符缓冲流


一、Stream流

简介

学习下面的知识前,我们先来了解下,什么是流?

流的概念:抽象概念,是对数据传输的总称,数据在设备间的传输称为流,流的本质是数据传输。

I/O流就是用来处理设备间传输问题的。

分类

数据流向划分:输入流输出流

数据类型划分:

二、File类

概述

封装一个磁盘路径字符串,对这个路径可以执行操作,可以封装文件路径、文件夹路径、不存在的路径。

常用方法

代码详解

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

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

        // 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
        File file = new File("E:\\根路径\\路径2");
        // 从父路径名字符串和子路径名字符串创建新的File实例
        File file1 = new File("E:\\根路径","路径2\\test");
        // 从父抽象路径名和子路径名字符串创建新的File实例
        File file2 = new File(file1,"路径2\\test");

        // 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
        File f = new File("E:\\根路径\\路径2\\test\\hello.txt");
        // exists() 测试此抽象路径名表示的File是否为文件
        if(!f.exists()){
            f.createNewFile();
        }
        // mkdir() 创建由此抽象路径名命名的目录
        // mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
        File f1 = new File("E:\\根路径\\路径2\\test1");
        f1.mkdir();

        System.out.println("----------------------------");
        // getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
        System.out.println(f1.getAbsoluteFile());

        System.out.println("----------------------------");
        // getPath() 将此抽象路径名转换为路径名字符串
        System.out.println(f1.getPath());

        System.out.println("----------------------------");
        //getName() 返回由此抽象路径名表示的文件或目录的名称
        System.out.println(f1.getName());

        System.out.println("----------------------------");
        // list() 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
        for (String s: file.list()){
            System.out.println(s);
        }

        System.out.println("----------------------------");
        // listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组
        for (File f0 : file.listFiles()){
            System.out.println(f0);
        }

        System.out.println("----------------------------");
        // isFile() 测试此抽象路径名表示的File是否为文件
        // isDirectory() 测试此抽象路径名表示的File是否为目录
        System.out.println(file1.isDirectory());
        System.out.println(file1.isFile());

        System.out.println("----------------------------");
    }
}

这里留一个思考,如何获取一个文件夹下所有文件的绝对路径(包括子文件夹下的文件)?

提示:递归遍历

代码参考

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

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

        File file = new File("E:\\根路径\\路径1");
        getAllFile(file);

    }
    public static void getAllFile(File file){
        File[] files = file.listFiles();
        for (File f : files){
            if(f.isDirectory()){
                getAllFile(f);
            }else {
                System.out.println(f.getAbsolutePath());
            }
        }
    }
}

运行结果:

三、字节流

概述

????????字节流是由字节组成的,Java里字符由两个字节组成.字节流是基本流,主要用在处理二进制数据。所以字节流是比较常用的,可以可以处理多种不同种类的文件,比如文本文档/音频/视频等等。

文件输出流

OutputStream抽象类,表示所有字节输出流的超类。

常用方法

FileOutputStream子类直接写入文件数据

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

FileOutStream(String name,boolean b)追加写入。

代码部分

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

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

        File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(48);
        byte[] bys = new byte[]{65, 66,67,68,69,70};
        fos.write(bys);
        fos.write(bys,2,3);
        fos.close();
    }
}

运行结果:

文件输入流

FileInputStream子类,直接读取文件数据

FileInputStream(String name)创建文件输入流以指定的名称读取文件。?

代码部分

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

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

        File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
        FileInputStream fis = new FileInputStream(file);
        int i;
        while ((i=fis.read())!=-1){
            System.out.print((char)i + " ");
        }
    }
}

运行结果:

字节缓冲流

BufferedOutputSream 字节缓冲输出流。

实现缓冲输出流,可以向底层输出流写入数据,而不必为写入的每个字节导致系统的调用。

构造方法

BufferedOutputSream(OutputStream out)

BufferedOutputSream(OutputStream out,int size)

BufferedInputSream 字节缓冲输入流

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

构造方法

BufferedInputSream(InputStream in)

BufferedInputSream(InputStream in,int size)

代码部分

import java.io.*;

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

        File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
        bos.write(48);
        bos.close();

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        int i;
        while ((i=bis.read())!=-1){
            System.out.println((char)i);
        }
    }
}

运行结果:

四、字符流

概述

组成:字节流 + 编码表。

编码表
?? ?ASCLL
?? ?GBXXX字符集
?? ?Unicode
?? ?采用任何规则编码,解码时也必须是对应的规则,否则会出现乱码
?? ??? ?编码
?? ??? ??? ?byte[] getBytes() 使用平台默认规则编码
?? ??? ??? ?byte[] getBytes(String charsetName) 使用指定规则编码
?? ??? ?解码
?? ??? ??? ?String(byte[] bytes) 使用平台默认规则解码
?? ??? ??? ?String(byte[] bytes,String charsetName) 使用指定规则解码

转换流

字符流抽象基类
?? ?Reader
?? ?Writer

转换流
?? ?InputStreamReader( FileInputStream fis );
?? ?OutputStreamWriter( FileOutputStream fos );

简化版
?? ?FileReader
?? ?FileWriter

写数据的方式
(根据参数不同)

读数据的方式
?? ?read() 一次读一个字符数据
?? ?read(char[] c) 一次读一个字符数组数据

代码部分

import java.io.*;

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

        File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
        File file1 = new File("E:\\根路径\\路径1\\资源文件1\\文件2.txt");

        // 转换流
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file));
        osw.write("我爱Java");
        osw.close();

        InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
        int s ;
        while ((s=isr.read())!=-1){
            System.out.print((char)s);
        }
        isr.close();

        System.out.println();
        // 简化版
        FileWriter fw = new FileWriter(file1);
        fw.write("我爱Java");
        fw.close();

        FileReader fr = new FileReader(file1);
        int i;
        while ((i = fr.read())!=-1){
            System.out.print((char)i);
        }

    }
}

运行结果:

字符缓冲流

BufferedReader?

从文本输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以接受默认的大小,默认值足够大,可用于大多数用途.

BufferedWrite

将文本写入字符输出流,缓冲字符,以提供单个字符数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认的大小,默认值足够大,可用于大多数用途.

特有功能
?? ?newLine 写一行行分隔符,行分隔符由系统定义属性
?? ?readLine() 读一行文字,结果包含行的内容的字符串,不包括任何行终止符,如果流的结尾已经到达,则返回null.

代码部分

import java.io.*;

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

        File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");

        BufferedWriter writer = new BufferedWriter(new FileWriter(file));
        writer.write("我非常喜欢Java");
        writer.newLine();
        writer.write("我也非常喜欢Java");
        writer.close();

        BufferedReader reader = new BufferedReader(new FileReader(file));
        String s;
        while ((s=reader.readLine())!=null){
            System.out.println(s);
        }


    }
}

运行结果:

?这次的分享就暂时到这里,如有错误的地方请多多指出,谢谢您的阅读。

??????????????????????????????????????????????????????

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:29:54  更:2021-11-14 21:30:54 
 
开发: 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:09:45-

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