6.javaSE基础进阶__文件和流

1.文件

1.定义:

通过File类来实现,File类>>磁盘存储的文件

2.路径的表示方式

\被当作转义符, 表示路径c:\\temp\\est.txt

3.File类的构造函数

File file = new File(文件名 | 路径);

4.File类方法:

方法说明
File.exists()文件或者目录是否存在
File.isFile()是否是文件
File.isDirectory()是否是目录
File.getName()取文件或者目录的名字
File.getPath()取文件或者目录的路径
File.getAbsolutePath()取文件绝对路径
File.lastModified()最后修改日期
File.length()文件或者目录的字节大小
File.createNewFile()创建新文件
        File file1 = new File("d:\\aa\\bb");
//        创建多目录
        boolean mkdirs = file1.mkdirs();
        System.out.println(mkdirs);
//        创建文件
        File file = new File(file1, "cc.txt");
        boolean newFile = file.createNewFile();
        System.out.println(newFile);

5.文件操作

  • mkdir()创建文件
  • list()获取当前目录列表

2.流

1.定义

程序运行中的通信信道

数据类:

  • 表示了字符或者字节数据的流动序列
  • 数据源和程序之间的数据传输
  • 数据流是指所有的数据通信通道

2.输入输出

  • 所谓输入:就是将编程者所设计的程序看作流的终点

  • 所谓输出:是将程序看作流的起点

  • 输入、输出功能是通过有关流的操作来完成的

    close( )

  1. 基本的输入输出对象

    用法类型说明
    System.outPrintStream把输出送到缺省的显示(通常是显示器)
    System.inInputStream从标准输入获取输入(通常是键盘)
    System.errPrintStream把错误信息送到缺省的显示

每当main方法被执行时,就自动生成上述三个对象

3.流的分类

  • 操作角度划分

    • 输入流read, 程序看作终点,内容读到信道中;
    • 输出流write, 程序看作起点.内容写到信道中;
  • 传输内容划分:

    • 字节流:会以字节的形式来处理数据。

    • 字符流:会以字符的形式来处理数据

3.字节流

字节流采用ASCII编码即一个字节(8个位)为单位进行数据的输入和输出。(字节单位进行输入输出)

1.分类:

1)InputStream类,输入流的基类

方法:

  • read():从流中读入数据
  • skip():跳过流中若干字节数
  • available():返回流中可用字节数
  • mark():在流中标记一个位置
  • reset():返回标记过得位置
  • markSupport():是否支持标记和复位操作
  • close():关闭流
2)OutputStream类,输出流的基类

方法:

  • Close():关闭输出流
  • flush():清空输出流缓冲区
  • write(int b):写入单个字节到输出流
  • write(byte[] buffer):写入一个字节数组到输出流。

2.FileInputStream类

方法说明
void close()关闭此文件输入流并释放与此流有关的所有系统资源
int read()从输入流中读取一个数据字节
int read(byte[ ] b)从输入流中将最多b.length个字节的数据读入到一个字节数组中
        File file = new File("d:\\aa\\bb\\cc.txt");
        FileInputStream fileInputStream = new FileInputStream(file);
//        int data=-1;
        while ( fileInputStream.read()!=-1){//读到文件末尾,fileInputStream.read()==-1
            System.out.print((char) fileInputStream.read());
        }
        fileInputStream.close();
..................................      
File file = new File("d:\\aa\\bb\\cc.txt");
        FileOutputStream fileOutputStream = new FileOutputStream(file, true);//true时,append追加内容,每加载一次重新加入内容
        for (int i = 97; i < 123; i++) {
            fileOutputStream.write(i);
        }
        fileOutputStream.close();

3.FileOutputStream

方法说明
void close()关闭文件输出流并释放与此流有关的所有系统资源
void write(byte[ ] b)将b.length个字节从指定字节数组写入到此文件输出流中
void write(int b)将指定字节写入到此文件输出流

4.文件拷贝

        File file = new File("d:\\aa\\bb\\cc.txt");
        File file1 = new File("d:\\aa\\bb\\ff.txt");
        FileInputStream fileInputStream = new FileInputStream(file);
        FileOutputStream fileOutputStream = new FileOutputStream(file1);
        int length = -1;
        while ((length = fileInputStream.read()) != -1) {
            fileOutputStream.write(length);
        }
        fileInputStream.close();
        fileOutputStream.close();

5.缓冲的输入输出流

1).定义

Java在提供了字节流的缓冲区流:

  • BufferedInputStream

    读取文件,将文件中8192字节全部读写出来,保存在缓冲区;

  • BufferedOutputStream

    数据写入到缓冲中,等到8192字节后,一次性写入磁盘(或不满8192时,关闭流close()也能缓冲区内容写出)

通过缓冲区流,减少访问硬盘的次数,提高效率

2).特点
  • 只有缓冲区满时,才会将数据送到输出流.
  • Java在输出数据流中,当对方尚未将数据取走时,程序就会被阻塞.
  • 有时要人为地将尚未填满的缓冲区中的数据送出,使用flush()方法
        File file = new File("d:\\aa\\bb\\cc.txt");
        File file1 = new File("d:\\aa\\bb\\ee.txt");
        FileInputStream fileInputStream = new FileInputStream(file);
        FileOutputStream fileOutputStream = new FileOutputStream(file1);
        BufferedInputStream bis = new BufferedInputStream(fileInputStream);
        BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
        int data=-1;
        while ((data= bis.read())!=-1){
            bos.write(data);
        }
        bis.close();
        bos.close();
        fileInputStream.close();
        fileOutputStream.close();

4.字符流

字符流采用UNICODE编码即2个字节(16个位)为单位进行数据的输入和输出。

1.分类

  • Reader

    Reader类是所有输入流类的基类,是个抽象类。Reader类对应的子类的所有方法在发生错误时都会抛出IOException异常

    包含类型:

    • InputStreamReader
    • BUfferedReader
    • FileReader

    常用方法:

    方法说明
    abstract void close()关闭输入源
    int read()从输入流读取单个字符的整数表示,如果不存在则返回-1
    int read(char buffer[ ])从输入流中将字符读入数组,如果遇到文件结尾,返回-1
    long skip(long n)跳过n个字符,返回跳过的字符数
  • Writer

    Writer类是所有输出流类的基类,也是个抽象类。

    包含类型:

    • OutputStreamWriter
    • BufferedWriter
    • FileWriter

    方法:

    方法说明
    abstract void close()关闭输出流
    Writer append(char c)将指定字符追加到此 writer
    void write(int ch)写入单个字符到调用的输出流
    void write(String str)写入str到调用输出流
    abstract void close()关闭输出流
    abstract void flush()清空输出缓冲区

2.InputStreamReader

继承了Reader,它实现了Reader的抽象方法。

  • InputStreamReader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。
  • 每次调用InputStreamReader中的一个read()方法都会导致从基础输入流读取一个或多个字节。
  • 为了达到最高效率,可以考虑在BufferedReader内包装InputStreamReader,BufferedReader类
        try {
            File file = new File("d:\\aa\\bb\\cc.txt");
            FileInputStream fileInputStream = new FileInputStream(file);
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
            System.out.println(inputStreamReader.getEncoding());//编码格式
            int data = -1;
            while ((data = inputStreamReader.read()) != -1) {
                System.out.print((char) data);
            }
            inputStreamReader.close();
            fileInputStream.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
.........................        
File file = new File("d:\\aa\\bb\\cc.txt");
        FileOutputStream fileOutputStream = new FileOutputStream(file);//创建字节流
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);//创建字符流
        outputStreamWriter.write("大家好!");
        outputStreamWriter.close();
        fileOutputStream.close();
1)方法:
方法说明
void close()关闭该流并释放与之关联的所有资源
String getEncoding()返回此流使用的字符编码的名称
int read()读取单个字符
boolean ready()判断此流是否已经准备好用于读取

3.OutputStreamWriter

OutputStreamWriter继承了Writer,它实现了Writer的抽象方法。

  • OutputStreamWriter是字符流通向字节流的桥梁,这刚好与InputStreamReader相反。
  • 他使用指定的charset将写入的字符编码转换为字节输出。
  • 它使用的字符集可以由名称指定或显示给定,否则可能接受平台默认的字符集。
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        System.out.println("请输入姓名:");
        String s = bufferedReader.readLine();
        System.out.println("hello "+s);
1)方法
方法说明
void close()关闭该流并释放与之关联的所有资源
String getEncoding()返回此流使用的字符编码的名称
void write(char[] cbuf, int off, int len)写入字符数组的某一部分
void flush()刷新该流的缓冲

4.BufferedReader

BufferedReader由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine()方法

BufferedReader有两个构造函数

方法说明
BufferedReader(Reader inputStream)创建使用缺省尺寸输入缓冲区的缓冲字符输入流
BufferedReader(Reader inputStream,int bufsize)创建一个使用指定大小输入缓冲区的缓冲
BufferedReader的常用方法
方法说明
void close()关闭该流并释放与之关联的所有资源
int read()读取单个字符
int read(char[] cbuf, int off, int len)将字符读入数组的某一部分
String readLine()读取一个文本行
boolean ready()判断此流是否已准备好被读取
long skip(long n)跳过n个字符,并返回跳过的字符数

5.PrintWriter

PrintWriter继承了Writer类,但除此之外此类还实现了PrintStream中的所有print()方法, PrintWriter可以直接输出字符串

PrintWriter的常用方法

方法说明
void print(Object obj)打印对象
void write(String s)写入字符串
void close()关闭该流并释放与之关联的所有系统资源
void flush()刷新该流的缓冲

5.对象流

1.定义:

将对象的内容进行流化,能够输入输出对象的流称为对象流。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间

特点:在java.io包中对象的持续性,能够纪录自己的状态以便将来再生的能力

2.序列化Serializable

无论是何种类型的数据,都会以二进制序列形式在网络上传送,发送方需要把这个java对象转换为字节序列,才能在网络上传送,同时接收方则需要把字节序列再恢复为对象。

1)分类:
  • 序列化:就是将对象的内容分解成字节流,以便存储在文件中或在网络上传输。
  • 反序列化:就是打开并读取字节流,且从该流中恢复该对象
2)实现序列化

只有实现java.io.Serializable接口的类才可以启用序列化功能。未实现此接口的类将无法启用任何状态的序列化和反序列化.

//将需要被序列化的类实现Serializable接口
public class Employee implements Serializable{  }
  • 如果某个类能够被序列化,其子类也可以被序列化。
  • static修饰的字段是不会被序列化的,序列化保存的是对象的状态而非类的状态,static静态域被忽略
  • transient修饰符修饰的字段不会被序列化。在序列化某个类的对象时,不希望某个字段被序列化(比如这个字段存放的是隐私值,如:密码等),那这时就可以用transient修饰符来修饰该字段

3.对象流类型

  1. 对象输入流ObjectInputStream

           ObjectInputStream objectInputStream = new ObjectInputStream(Files.newInputStream(Paths.get("d:\\aa\\bb\\data.txt")));
            Student o = (Student) objectInputStream.readObject();
    //        Object o1 = objectInputStream.readObject();//向上转型
            System.out.println(o);
            objectInputStream.close();
    
  2. 对象输出流ObjectOutputStream

          ObjectOutputStream objectOutputStream = new ObjectOutputStream(Files.newOutputStream(Paths.get("d:\\aa\\bb\\data.txt")));
            Student student = new Student(1001, "arran", 24);
            objectOutputStream.writeObject(student);
            objectOutputStream.close();
    

4.实现类

对象输入流操作中:如果文件存在,但没有内容,通过对象流读取时会报java.io.EOFException异常 ,所以我们要加上条件判断,如果文件length()为0时,直接提示用户为空,不再往下执行程序

对象输出流:当创建对象输出流后便会向文件中写内容,内容为NULENO,八个字节

此处注意:添加操作中创建输出流的位置要放到查询全部之后,因为创建输出流成功时既会往文件里写内容,否则会报EOFException

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/744738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网关登录校验

如何在网关转发之前做登录校验&#xff1f; 网关请求处理流程 如何在网关转发之前做登录校验&#xff1f; 网关如何将用户信息传递给微服务&#xff1f; 如何在微服务之间传递用户信息&#xff1f; 自定义过滤器 网关过滤器有两种&#xff0c;分别是&#xff1a; GatewayFi…

春秋云境:CVE-2022-25411[漏洞复现]

根据题目提示和CNNVD优先寻找后台管理地址 靶机启动后&#xff0c;使用AWVS进行扫描查看网站结构 在这里可以看到后台管理的登录地址&#xff1a;/admin/&#xff0c;根据题目提示可知是弱口令 尝试admin、123456、admin666、admin123、admin888...等等常见弱口令 正确的账户…

论文导读 | Manufacturing Service Operations Management近期文章精选

编者按 在本系列文章中&#xff0c;我们梳理了顶刊Manufacturing & Service Operations Management5月份发布有关OR/OM以及相关应用的文章之基本信息&#xff0c;旨在帮助读者快速洞察行业/学界最新动态。 推荐文章1 ● 题目&#xff1a;Robust Drone Delivery with Weath…

KVM网络模式设置

一、KVM网络模式介绍 1、NAT ( 默认上网 ) 虚拟机利用host机器的ip进行上网,对外显示一个ip;virbr0是KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供NAT访问外网的功能,默认ip为192.168.122.1 2、自带的Bridge 将虚拟机桥接到host机器的网卡上,vm和ho…

【C++题解】1712. 输出满足条件的整数2

问题&#xff1a;1712. 输出满足条件的整数2 类型&#xff1a;简单循环 题目描述&#xff1a; 有这样的三位数&#xff0c;其百位、十位、个位的数字之和为偶数&#xff0c;且百位大于十位&#xff0c;十位大于个位&#xff0c;请输出满所有满足条件的整数。 输入&#xff1…

C++ | Leetcode C++题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int hammingWeight(uint32_t n) {int ret 0;while (n) {n & n - 1;ret;}return ret;} };

SpringBoot控制反转和依赖注入

目录 一、内聚和耦合 二、分层解耦 三、具体实现 四、bean的组件扫描 五、bean注入 一、内聚和耦合 在了解分层解耦的概念之前我们我们要去先了解一下内聚和耦合。内聚&#xff1a;通常将的是软件中各个模块之间的功能联系。耦合衡量软件各个模块之间的依赖、关联的程度。一…

【ai】tx2 nx : fix pip升级警告

jetson 环境同样出现:【原创】pip3 使用报警问题在对 Ubuntu 18.04 上的 pip3 9.0.1 版本使用 pip install -U pip 的方式进行升级后,再使用 pip 就会出现一堆警告信息。这个警告信息目前不影响使用,但从警告信息来看,会在未来版本中出现失败风险。 当前系统中存在了两个不…

Android反编译之Apktool

文章目录 简述工具操作步骤 简述 可以从apk安装包中提取出res、AndroidManifest、xml等文件&#xff1b;也可以修改资源文件后rebuild一个apk。 工具 1.官方下载地址 https://apktool.org/ 2.操作指令 // 解析apk包 $ apktool d test.apk // 重新rebuid apk包 $ apktool …

vscode_cmake_stm32_lvgl移植及显示优化

1 LVGL移植 本文使用的环境如下&#xff1a; STM32H743FreeRTOSst7789 lcd(320*240) 下载 LVGL源码&#xff0c;本文使用Release v9.1.0&#xff1b; 将压缩包解压到工程目录&#xff0c;例如stm32h7xx_cmake_project/components/lvgl-9.1.0&#xff0c;如下所示&#xff1a; …

vue3封装表格嵌套表单问题汇总

1.插槽嵌套多层数据ui组件怎么使用 思路&#xff1a;插槽具名【区分】后暴露传递&#xff0c;这个为神魔要区分&#xff0c;因为封装组件表格列表项也有插槽 步骤一&#xff1a;表单插槽暴露 <ElFormclass"form-search":model"formParams"ref"form…

Linux 磁盘挂载与分区

Linux 磁盘挂载与分区 vda1: 其中vd表示虚拟磁盘&#xff0c;a表示第一块磁盘&#xff0c;b表示第二块磁盘&#xff0c;1表示第一块磁盘的第一分区&#xff08;显然两块磁盘都只有一个分区&#xff09;图中可以看到&#xff0c;vda1磁盘只有一个分区&#xff0c;且全部挂载到根…

期末复习题中的问题

一、编程中&#xff08;包括函数&#xff09;的问题 1. malloc 头文件是stdlib.h 二、第二次写复习题的不会的 三、程序填空 总结&#xff1a; 删除节点m >>>>要有一个指针来遍历找到这个m >>>> 用另一个指针指向这个指针的下一 个 >>&…

【数据结构与算法】堆排序算法 详解

堆排序算法 Status heapAdjust(ElemType *a, int s, int m) {ElemType t a[s];for (int j s * 2 1; j < m; j j * 2 1) {if (j < m && a[j] < a[j 1]) {j;}if (t > a[j]) {break;}a[s] a[j];s j;}a[s] t;return OK; }Status heapSort(ElemType *a…

[C#][opencvsharp]C#使用opencvsharp进行年龄和性别预测支持视频图片检测

使用 OpenCVSharp 来调用 age_net.caffemodel 和 gender_net.caffemodel 来进行性别和年龄预测涉及几个步骤。以下是一个简化的流程和示例文案&#xff1a; 1. 准备工作 确保你已经安装了 OpenCVSharp 和相关的依赖项。确保你有 age_net.prototxt、age_net.caffemodel、gende…

【redis】redis概述

1、定义 Redis&#xff08;Remote Dictionary Server&#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的、内存中的数据结构存储系统。redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)…

Web前端第四次作业

目录 一、编写一个函数&#xff0c;形参是一个数组&#xff0c;返回数组中所有数字的平均值 二、编写一个函数&#xff0c;形参是一个数组&#xff0c;返回数组中的最大值 三、编写一个函数&#xff0c;形参是一个字符串&#xff0c;统计该字符串中每个字母出现的次数&#…

Windows 获取打印机及端口号方法 (C#)

1. 打开注册表编辑器 regedit 2.选择如下配置 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Device 3. 代码 C# using System; using Microsoft.Win32;class Program {static void Main(){string registryPath "SOFTWARE\Microsoft\Windows …

Commons-Collections篇-CC5链分析

前言 CC5链和CC1差不多&#xff0c;只不过调用LazyMap.get()是通过TiedMapEntry.toString()触发的 1.环境 我们可以接着使用之前已经搭建好的环境&#xff0c;具体过程可以看CC1分析文章的环境安装部分 Commons-Collections篇-CC1链小白基础分析学习 2.分析 我们先把后半段…

云南省森林管理新篇章:可视化大屏引领绿色智慧革命

在云南省这片绿意盎然的土地上&#xff0c;森林不仅是自然的宝藏&#xff0c;更是生态的守护者。 想象一下&#xff0c;站在巨大的屏幕前&#xff0c;云南省的森林分布、生长状况、病虫害情况等信息一目了然&#xff0c;仿佛拥有了一双能够洞察森林奥秘的“智慧眼”。这正是森林…