Java输入输出流的学习

举报
多米诺的古牌 发表于 2021/06/05 16:31:13 2021/06/05
【摘要】 1.流的定义流是一连串流动的字符以先进先出的方式传输的通道。Java中的流既可以是未经加工的原始二进制数据,也可以是经过一定编码处理后符合某种特定格式的数据。其中按照数据的传输方向分为输入流与输出流,按照数据类型还可以分为字节流和字符流,统称为IO流。2.IO流的应用io流应用最广泛的应该就是上传文件、下载文件和传输数据。3.File文件类java.io.File 类是文件和目录路径名的抽象...

1.流的定义

流是一连串流动的字符以先进先出的方式传输的通道。

Java中的流既可以是未经加工的原始二进制数据,也可以是经过一定编码处理后符合某种特定格式的数据。

其中按照数据的传输方向分为输入流与输出流,按照数据类型还可以分为字节流和字符流,统称为IO流。

2.IO流的应用

io流应用最广泛的应该就是上传文件、下载文件和传输数据。

3.File文件类

java.io.File 类是文件和目录路径名的抽象表示,是专门用于文件操作的类,但是不能对文件内容进行操作,主要用于文件和目录的创建、查找和删除等操作。

3.1 创建文件和文件夹

创建文件主要通过如下方式进行创建:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例,参数是(String pathname);从父路径名字符串和子路径名字符串创建新的 File实例,参数是(String parent, String child);从父抽象路径名和子路径名字符串创建新的 File实例,参数是(File parent, String child) 。

String path = "D:\\testFile\\file123.txt";
File file = new File(path);

if(!file.getParentFile().exists()){
    file.getParentFile().mkdirs();
 }
if(!file.exists()){
  file.createNewFile();
}

注意:直接实例化File是创建不出来文件夹或者文件的,创建文件夹需要mkdir()或者mkdirs()方法,创建文件则需要createNewFile()方法,一般创建文件时需要先判断下父级文件夹目录是否存在,只有有父级文件夹目录才能创建里面的文件否则会抛异常。

其中mkdir()方法为创建一级目录,mkdirs()方法是创建多级目录,就是不管几层一次创建。

3.1 删除文件和文件夹

删除文件和删除文件夹都是对指定File对象调用delete()方法,因此要将文件夹和文件都删除的话,需要进行判断,因为文件夹里有文件是删除不了文件夹的,必须将文件夹中的文件清空才能将文件夹删除。

public void deleteFile(File file){
        if(file.exists()){
            if(file.isFile()){
                file.delete();
            }else{
                File[] fileList = file.listFiles();
                for(File f : fileList){
                   deleteFile(f);
                }
            }
            file.delete();
        }else{
            System.out.println("file路径不存在!");
        }
 }

4.输入输出字节流

字节流是以字节为单位,读写数据的流,按照数据传输的方向分为:输入字节流InputStream和输出字节流OutputStream。

4.1 输入字节流InputStream

一切文件数据,包括文本、图片、视频等等在读取的过程中都是以二进制的形式读取,因为保存任何数据的底层都是以字节进行读取的。

InputStream 抽象类是所有的输入字节流的父类。继承InputStream抽象类的ByteArrayInputStream实现类、StringBufferInputStream实现类、FileInputStream实现类分别对应处理Byte数组、StringBuffer缓存流和本地文件的数据读取操作。

常用的方法有:

abstract int read()方法是从输入流中读取数据的下一个字节;

int read(byte[] b)方法是从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中;

int read(byte[] b, int off, int len)方法将输入流中最多 len 个数据字节读入 byte 数组;

long skip(long n) 跳过和丢弃此输入流中数据的 n个字节;

void close()关闭此输入流并释放与该流关联的所有系统资源。

public void InputTest() throws IOException {
        FileInputStream f = new FileInputStream("D:\\testFile\\test123.txt");
        int len = 0;
        while ((len = f.read()) != -1){
            System.out.print((char)len +" ");
        }
        f.close();
 }

4.2 输出字节流InputStream

一切文件数据,包括文本、图片、视频等等在存储的过程中都是以二进制的形式保存,因为保存任何数据的底层都是以字节进行存储的。

public void outputTest() throws IOException {
        FileOutputStream f = new FileOutputStream("D:\\testFile\\test123.txt");
        Byte[] bytes = {99,115,49,50,51 };
        for (Byte b : bytes){
            f.write(b);
        }
        f.close();
}

5.输入输出字符流

5.1 输入字符流Reader

FileReader f = new FileReader("a.txt");
int len;
while ((len = f.read())!=-1) {
    System.out.println((char)len);
}
f.close();

5.2 输出字符流Writer

FileReader r = new FileReader("testFile.txt"); 
FileWriter w = new FileWriter("testFile2.txt"); 
int len;
while((len = r.read())! = -1){
   w.write(len);
}


    

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。