JAVA IO流学习

File类:

File类是java.io包中很重要的一个类

File类的对象可以代表一个文件或者目录,可以修改文件大小、文件最后修改日期、文件名等

File对象不能操作文件的具体数据,即不能对文件进行读和写的操作

File的构造方法:

File(String pathname)  -------指定文件(目录)名和路径创建文件对象

File类的常用方法:

package file;

import java.io.File;
import java.io.IOException;
import java.util.Date;

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        /*
        一个File对象可以代表具体的文件或者目录 , 是对文件或者目录的抽象表示
         */
        File f1=new File("D:\\java测试专用\\file测试用例");//指明详细的路径和文件名,注意用用双斜线或者反斜杠
        //指明详细的路径和目录名,注意用双斜线
       f1.createNewFile();//该名称文件不存在时,在该路径下创造出文件  原子地创建一个由该抽象路径名命名的新的空文件。
        System.out.println(f1.exists());//判断文件是否存在
        System.out.println(f1.canRead());//判断文件是否可以读取
        System.out.println(f1.canWrite());//判断文件是否可以写入

        System.out.println(f1.getParent());//返回此抽象路径的父级路径,如果不存在则返回NULL
        System.out.println(f1.getName());//获取路径名称
        System.out.println(f1.isDirectory());//测试此路径名是否为目录
        System.out.println(f1.isFile());//判断是否为普通文件
        System.out.println(f1.isHidden());//是否为隐藏文件
        System.out.println(f1.lastModified());//返回最后修改时间
        System.out.println(f1.getPath());//将此抽象路径名转换为路径名字符串。
        System.out.println(new Date(1679652353967L));
        System.out.println(f1.length());//返回此抽象路径名代表的文件的长度
    }
}

输入及输出的概念:

输入:把电脑硬盘中的东西读到程序中叫做输入(input)

输出:进行数据的read操作,将程序中的内容写出到外部设备中叫做输出(output),进行数据的write操作。

字节流与字符流:

从数据流编码格式上划分为字节流字符流

字节流常用类:

字节输入流:FileInputStream;

字节输出流:FileOutputStream

字符流常用类:

字符输入流:FileReader;

字符输出流:FileWriter

输入流与输出流:

流按照数据的传输方向分为输入流输出流

输入流:往程序中传输数据叫做输入流

输出流:从程序中往外写数据叫做输出流

● InputStream和OutputStream的子类都是字节流 可以读写二进制文 件,主要处理音频、图片、歌曲、字节流,处理单元 为1个字节。

● Reader和Writer的子类都是字符流 主要处理字符或字符串,字符流处理单元为1个字符。

字节流将读取到的字节数据,去指定的编码表中获取对应文字字符

输入输出节点字节流:

InputStream的基本方法:

close();       关闭流释放内存资源

read();读取一个字节并以整数的形式返回(0~255),如果返回-1说明已到输入流的末尾

read(byte[ ] b);读取一系列字节并存储到数组b中,返回读取到的字节数,如果读取前已到输入流的末尾。则返回-1

read(byte[ ] b,int off,int len);从索引off处开始读取len个字节并存储到数组b中,返回读取到的字节数,如果读取前已到输入流的末尾。则返回-1

OutputStream的基本方法:

close();关闭流释放内存资源

flush();刷新输出缓存区,直接将缓存区的数据输出而不必等到缓存区满,通常用在多线程的环境中,它可以确保当前缓存内容被输出,并立即释放内存

writre(int b);向输出流中写入一个字节数据,该字节数据为参数b的低八位

write(byte[ ] b);将一个数组写入到输出流中

write(byte[ ] b,off,len);将一个数组从索引off处开始len个字节写入到输出流中

节点流与处理流:

根据封装类型不同,流又被分为:

节点流、处理流

节点流:如果流封装的是某种特定的数据源,如文件、字符数组、字符串等,则称之为节点流

处理流:如果流封装的是其它对象,则称之为处理流。处理流提供了缓冲功能,提高了读写效率,同时增加了一些新的方法

节点流中常用类:

字节输入流:FileInputStream

字节输出流:FileOutputStream

字符输入流:FileReader

字符输出流:FileWrite

处理流中常用类:

缓冲字节输入流:BufferedInputStream

缓冲字节输出流:BufferedOutputStream

缓冲字符输入流:BufferedReader

缓冲字符输出流:BufferedWriter

输入输出节点字符流:

Reader的基本方法:

close();       关闭

read();读取一个字节并以整数的形式返回(0~255),如果返回-1说明已到输入流的末尾

read(char[ ] b);读取一系列字节并存储到数组b中,返回读取到的字节数,如果读取前已到输入流的末尾。则返回-1

read(char[ ] b,int off,int len);从索引off处开始读取len个字节数据并存储到数组b中,返回读取到的字节数,如果读取前已到输入流的末尾。则返回-1

Writer的基本方法:

close();关闭流释放内存资源

flush();刷新输出缓存区,直接将缓存区的数据输出而不必等到缓存区满,通常用在多线程的环境中,它可以确保当前缓存内容被输出,并立即释放内存

writre(int b);向输出流中写入一个字节数据,该字节数据为参数b的低八位

write(char[ ] b);将一个字符类型数组的数据写入到输出流中

write(char[ ] b,off,len);将一个字符类型数组从索引off处开始len个字节的字符写入到输出流中

对象输入输出流:

package chardemo;

import java.io.*;
import java.util.Date;

public class ObjectDemo {
    /*
      对象输入输出流: 把Java中的对象输出到文件中, 从文件把对象输入到程序中
      为什么要把对象输出到文件中?
             new Student(“张er”,20);数据存储在对象中,对象是在内存中存储,一旦程序运行结束,对象就会销毁
             有时需要将对象的信息长久保存,就需要将对象输出到文件中,长久保存。  举例系统升级   关闭服务器时将对象保存起来,升级完毕,重新再把数据还原回来
             把对象输出到文件的过程也称为对象的序列化,
             再把对象从文件输入到程序的过程称为对象的反序列化,反序列时会生成一个新的对象,所以反序列化也是创建对象的一种方式
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
       // String s=new String("fsde");
        //Date date=new Date();
        Student student=new Student(66,"zz");
        //对象输出   对象的序列化

       // FileOutputStream out=new FileOutputStream("D:\\demo.txt");
     //   ObjectOutput output=new ObjectOutputStream(out);
               //output.writeObject(s);
               //output.writeObject(date);
      /*  output.writeObject(student);
               output.flush();
               output.close();
*/
        //对象输入   对象反序列化
        FileInputStream inputStream=new FileInputStream("D:\\demo.txt");
        ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);
         //        String s=(String)objectInputStream.readObject();
                 Date date=(Date) objectInputStream.readObject();
        //System.out.println(s);
        System.out.println(date);
        Student student1=(Student)objectInputStream.readObject();
        System.out.println(student1);
        objectInputStream.close();
    }

}

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

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

相关文章

Redis中的Sentinel(一)

Sentinel 概述 Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时&#xff0…

H.264 压缩与编解码原理

H.264 压缩与编解码原理 H.264 压缩与编解码原理H.264 简介视频编码的总体思路H.264 压缩技术帧内预测压缩什么是空间冗余?具体预测方法 帧间预测压缩什么是时间冗余?具体预测方法:运动估计 概念:Group of Pictures(GO…

容器的底层技术:CGroup和NameSpace

无论是容器,还是虚拟机,都依赖于内核中的技术,虚拟机依赖的是 KVM,容器依赖的是 namespace 和 cgroup 对进程进行隔离和资源限制。 容器实现封闭的环境主要要靠两种技术,一种是看起来是隔离的技术,称为nam…

闻风丧胆的算法(二)

🌈个人主页:Rookie Maker 🔥 系列专栏:算法 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆 😀欢迎来到小田代码世界~ 😁 喜欢的小…

在linux下conda 创建虚拟环境失败的解决方法

报错内容一&#xff1a; Solving environment: failed CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/conda-forge/noarch/repodata.json> Elapsed: - An HTTP error occurred when trying to retrieve this URL. HTTP errors are…

Redis面试题28道

1、什么是类加载器&#xff0c;类加载器有哪些&#xff1f; 1、什么是类加载器&#xff1f; 类加载器负责加载所有的类&#xff0c;其为所有被载入内存的类生成一个 java.lang.Class 实例对象。 2、类加载器有哪些&#xff1f; JVM 有三种类加载器&#xff1a; &#xff08…

二分答案 蓝桥杯 2022 省A 青蛙过河

有些地方需要解释&#xff1a; 1.从学校到家和从家到学校&#xff0c;跳跃都是一样的&#xff0c;直接看作2*x次过河就可以。 2.对于一个跳跃能力 y&#xff0c;青蛙能跳过河 2x 次&#xff0c;当且仅当对于每个长度为 y 的区间&#xff0c;这个区间内 h 的和都大于等于…

一文彻底搞懂synchronized实现原理

文章目录 1. synchronized 是什么2. synchronized 可以实现的锁3. synchronized 使用4. synchronized 底层原理4.1 作用于同步代码块4.2 作用于方法 1. synchronized 是什么 synchronized 是 Java 中实现线程同步的关键字&#xff0c;用于保护共享资源的访问&#xff0c;确保在…

TCP/IP协议、HTTP协议和FTP协议等网络协议包简介

文章目录 一、常见的网络协议二、TCP/IP协议1、TCP/IP协议模型被划分为四个层次2、TCP/IP五层模型3、TCP/IP七层模型 三、FTP网络协议四、Http网络协议1、Http网络协议简介2、Http网络协议的内容3、HTTP请求协议包组成4、HTTP响应协议包组成 一、常见的网络协议 常见的网络协议…

如何打包一个手机软件

目录 前言&#xff1a; 准备工具&#xff1a; 创建项目&#xff1a; 打包程序&#xff1a; 前言&#xff1a; 我们平时手机上使用的程序&#xff0c;或者电脑上使用的程序都可以由Web程序打包而来的&#xff0c;而打包不是一个.html文件也不是一个.js文件而是一个大型的文…

【AAOS车载系统+AOSP14系统攻城狮入门实战课】:正式上线了(二百零三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Blender怎么样启动默认移动和Cavity效果

在使用Blender的过程中&#xff0c;有一些特殊的技巧很重要。 比如默认地设置blender打开时&#xff0c;就是移动物体&#xff0c;这样怎么样设置的呢&#xff1f; 需要在界面里打开下面的菜单: 这样就找到默认设置的地方&#xff0c;把下面的移动勾选起来&#xff0c;这样点…

使用注意力机制的 LSTM 彻底改变时间序列预测

目录 一、说明二、LSTM 和注意力机制简介三、为什么要将 LSTM 与时间序列注意力相结合&#xff1f;四、模型架构训练与评估 五、验证六、计算指标七、结论 一、说明 在时间序列预测领域&#xff0c;对更准确、更高效的模型的追求始终存在。深度学习的应用为该领域的重大进步铺…

深度学习pytorch实战第P2周:CIFAR10彩色图片识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 零、引言&#xff08;温故而知新&#xff…

C++算法 —— 前缀和

一、【模版】前缀和 1.链接 【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 2.描述 3.思路 前缀和的思想其实就是一种简单的动态规划&#xff0c;以i位置记录从头位置到i位置的和&#xff0c;然后间接的求一段连续区间的数组和&#xff0c;时间复杂度是O&#xff08;n&…

基于多模态单细胞数据构建共表达网络-MuSeGNN

本篇来自于MuSe-GNN: Learning Unified Gene Representation From Multimodal Biological Graph Data的补充材料。主要目的是从多模态数据中构建共表达网络。作者概述了使用CS-CORE&#xff0c;scTransform和SPARK-X进行预处理步骤和网络构建的算法细节。 目前存在大量用于图谱…

ESP32 引脚分配

请注意&#xff0c;以下引脚分配参考适用于流行的 30 引脚ESP32 devkit v1开发板。 仅输入引脚 GPIO34~39是GPIs–仅输入的管脚。这些引脚没有内部上拉或下拉电阻。它们不能用作输出&#xff0c;因此只能将这些管脚用作输入&#xff1a;GPIO 34、GPIO 35、GPIO 36、GPIO 39 S…

利用nginx-http-flv-module实现三种直播

目录 一、说明 二、目标 三、实现 四、直播地址 一、说明 此文在《流媒体服务器的搭建(支持hls)》《搭建nginx-http-flv-module直播系统》之后编写,很多详细内容需要参考它。 流媒体服务器的搭建(支持hls)

【解读Kubernetes架构】全面指南,带你掌握Kubernetes的设计原理与构成!

了解 Kubernetes 架构&#xff1a;综合指南 前言一、什么是 Kubernetes 架构&#xff1f;1.1、控制平面1.2、工作节点 二、Kubernetes 控制平面组件2.1、kube-api服务器2.2、etcd2.3、kube-scheduler2.4、Kube 控制器管理器2.5、云控制器管理器 &#xff08;CCM&#xff09; 三…

Web APIs简介 Dom

JS的组成 API API 是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节 简单理解&#xff1a;API是给程序员提供的一种工具&#xff0c;以便能更轻松的实现…