Java-IO流学习

news2025/3/1 3:46:27

文章目录

  • 前言
  • 1.Java-IO流简介
  • 2.流的基本概念
  • 3.创建文件的三种方式
    • 3.1根据一个文件路径直接创建一个文件。
    • 3.2 根据父目录 File 对象,在子路径创建一个文件
    • 3.3 根据父目录路径,在子路径下生成文件
  • 4.获取文件信息
  • 5.目录与文件操作
    • 5.1文件删除
    • 5.2目录删除
    • 5.3创建单级目录
    • 5.4 创建多级目录
  • 6.IO 知识点 —— IO 流分类
    • 6.1利用FileInputStream.read读取文件
    • 6.2利用Runtime中的内置Exec方法进行命令执行并输出
    • 6.3向文件中写入内容
    • 6.4文件拷贝
  • 小结

前言

学习了简单的java反序列化后,看到了Java-IO流的有关知识,了解一下。

1.Java-IO流简介

Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。

IO又分为流IO(java.io)和块IO(java.nio)

Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO。

2.流的基本概念

标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。将数据从外存中读取到内存中的称为输入流,将数据从内存写入外存中的称为输出流。

我的理解是:从eclipse输出到文本文件txt中叫输出流,而从文本文件txt输入到eclipse叫作输入流。

操作 IO 流的模板:

①、创建源或目标对象

输入:把文件中的数据流向到程序中,此时文件是 源,程序是目标

输出:把程序中的数据流向到文件中,此时文件是目标,程序是源

②、创建 IO 流对象

输入:创建输入流对象

输出:创建输出流对象

③、具体的 IO 操作

④、关闭资源

输入:输入流的 close() 方法

输出:输出流的 close() 方法

3.创建文件的三种方式

3.1根据一个文件路径直接创建一个文件。

代码如下:

CreatFile.java

package IO;

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

public class CreatFile{
    public static void main(String[] args) throws IOException {
        createFile();
    }
    public static void createFile() throws IOException{
        File file = new File("C:\\Users\\Administrator\\Desktop\\feng.txt");//创建的文件路径
        file.createNewFile();
        System.out.println("Create Successfully");
        }
}

运行代码,会返现桌面中会多出一个空的feng.txt。

3.2 根据父目录 File 对象,在子路径创建一个文件

利用到的方法: new File(File parent, String child)

CreatFile2.java

package IO;

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

// 根据父目录File对象,在子路径创建一个文件
public class CreatFile2 {
    public static void main(String[] args) throws IOException {
        createFile();
    }

    public static void createFile() throws IOException {
        File parentFile = new File("C:\\Users\\Administrator\\Desktop");
        File file = new File(parentFile, "feng2.txt");
        file.createNewFile();
        System.out.println("Create Successfully");
    }
}

3.3 根据父目录路径,在子路径下生成文件

代码如下:

package IO;

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

// 根据父目录路径,在子路径下生成文件
public class newfile3 {
    public static void main(String[] args) throws IOException {
        createFile();
    }

    public static void createFile() throws IOException {
        String parentPath = "C:\\Users\\Administrator\\Desktop";
        String fileName = "feng3.txt";
        File file = new File(parentPath, fileName);
        file.createNewFile();
        System.out.println("Create Successfully");
    }
}

4.获取文件信息

首先在feng.txt中写入内容。

然后利用File类来获取feng.txt文件的信息。

package IO;

import java.io.File;

public class showFile {
    public static void main(String[] args) {
        getFileContents();
    }

    public static void getFileContents(){
        File file = new File("C:\\Users\\Administrator\\Desktop\\feng.txt");
        System.out.println("文件名称为:" + file.getName());
        System.out.println("文件的绝对路径为:" + file.getAbsolutePath());
        System.out.println("文件的父级目录为:" + file.getParent());
        System.out.println("文件的大小为:" + file.length());
        System.out.println("这是不是一个文件:" + file.isFile());
        System.out.println("这是不是一个目录:" + file.isDirectory());
    }
}

image-20221115143451861

5.目录与文件操作

5.1文件删除

使用file.delete(文件)

package IO;

import java.io.File;
import java.lang.reflect.Field;

public class fileDelete {
    public static void main(String[] args) {
        deleteFile();
    }
    public static void deleteFile(){
        File file = new File("C:\\Users\\Administrator\\Desktop\\feng2.txt");
        System.out.println(file.delete() ? "Delete Successfully":"Delete failed");
    }
}

运行后便可以删除之前创建的feng2.txt

5.2目录删除

还是使用file.delete(目录)方法,注意只能删除空目录

package IO;

import java.io.File;

public class directoryDelete {
    public static void main(String[] args) {
        deleteDirectory();
    }
    public static void deleteDirectory(){
        File file = new File("C:\\Users\\Administrator\\Desktop\\123");
        System.out.println(file.delete()? "Delete Successfully":"Delete failed");
    }
}

5.3创建单级目录

package IO;

import java.io.File;


public class CreatDirectory {
    public static void main(String[] args) {
        createSingleDir();
    }
    public static void createSingleDir(){
        File file = new File("C:\\Users\\Administrator\\Desktop\\feng");
        System.out.println(file.mkdir() ? "Create Successfully":"Create failed");
    }
}

5.4 创建多级目录

方法 file.mkdirs

package IO;

import java.io.File;


public class MultiDirectory {
    public static void main(String[] args) {
        createMultiDir();
    }

    public static void createMultiDir(){
        File file = new File("C:\\Users\\Administrator\\Desktop\\feng2");
        System.out.println(file.mkdirs() ? "Create Successfully":"Create failed");

    }
}

6.IO 知识点 —— IO 流分类

按照操作数据单位不同分为:字节流字符流

  • 字节流(8bit,适用于二进制文件)
  • 字符流(按字符,因编码不同而异,适用于文本文件)

操作 IO 流的模板:

①、创建源或目标对象

输入:把文件中的数据流向到程序中,此时文件是 源,程序是目标

输出:把程序中的数据流向到文件中,此时文件是目标,程序是源

②、创建 IO 流对象

输入:创建输入流对象

输出:创建输出流对象

③、具体的 IO 操作

④、关闭资源

输入:输入流的 close() 方法

输出:输出流的 close() 方法

6.1利用FileInputStream.read读取文件

代码:

FileInputRead.java

package IO;

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

public class FileInputRead {
    public static void main(String[] args) throws IOException{
        readFile();
    }
    public static void readFile() throws IOException{
        String filePath = "C:\\Users\\Administrator\\Desktop\\feng.txt";
        FileInputStream fileInputStream = null;
        int readData = 0;
        fileInputStream = new FileInputStream(filePath);
        while((readData = fileInputStream.read())!=-1){
            System.out.print((char)readData);
        }
    }
}

进行调试,可以清楚的理解代码的作用,然后利用read一个一个读取字符流来输出读取到的文件的内容。

跟进一下read:

image-20221115191941515

发现其作用便是一个一个读取字符

public int read() throws IOException
从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。
指定者:
类 InputStream 中的 read
返回:
下一个数据字节;如果已到达文件末尾,则返回 -1。

所以可以用while((readData = fileInputStream.read())!=-1)方法来输出读取到的内容。

6.2利用Runtime中的内置Exec方法进行命令执行并输出

RuntimeExec.java

package IO;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

// 使用 Runtime 类进行命令执行
public class RuntimeExec {
    public static void main(String[] args) throws Exception {
        InputStream inputStream = Runtime.getRuntime().exec("whoami").getInputStream();
        byte[] cache = new byte[1024];
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        int readLen = 0;
        while ((readLen = inputStream.read(cache))!=-1){
            byteArrayOutputStream.write(cache, 0, readLen);
        }
        System.out.println(byteArrayOutputStream);
    }
}

利用的是inputStream.read来读取输出流,6.1是读取文件输出流。

6.3向文件中写入内容

利用write(byte[] b) 方法。

package IO;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

// write(byte[] b) 方法
public class filewrite {
    public static void main(String[] args) throws IOException{
        writeFile();
    }

    public static void writeFile() throws IOException{
        String filePath = "C:\\Users\\Administrator\\Desktop\\feng.txt";
        FileOutputStream fileOutputStream = null;
        fileOutputStream = new FileOutputStream(filePath);
        String content = "You are successful!";
        fileOutputStream.write(content.getBytes());
        fileOutputStream.close();
    }
}

注意,该代码是直接将原文件赋值,原来的文件内容直接被覆盖。

或者如果想要写入的数据不被覆盖,可以设置 FileOutputStream 的构造方法 append 参数设置为 true

6.4文件拷贝

需要拷贝的文件feng.png

image-20221116100322345

利用FileInputStream和fileOutputStream,然后就是fileInputStream.read一个一个读取,fileOutputStream.write再写入。

package IO;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class filecopy {
    public static void main(String[] args) throws IOException{
        copyFile();
    }
    public static void copyFile() throws IOException{
        String srcFilename = "C:\\Users\\Administrator\\Desktop\\feng.png";
        String desFilename = "C:\\Users\\Administrator\\Desktop\\feng2.png";
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        fileInputStream = new FileInputStream(srcFilename);
        fileOutputStream = new FileOutputStream(desFilename);
        byte[] cache = new byte[1024];
        int readLen = 0;
        while((readLen = fileInputStream.read(cache)) != -1){
            fileOutputStream.write(cache, 0, readLen);
        }
    }
}

运行代码即可发现图片中的内容被复制到了feng2.PNG当中

image-20221116100401433

小结

IO流其实就是基于数据流进行输入输出,java在读取和写入文件是都可以将其转化成数据流来进行操作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】实验二 Makefile 的编写及应用

静态和动态库的转换可以参考这篇文章哦!! 文章目录实验二 Makefile 的编写及应用实验目的实验内容具体步骤:一、进入文件夹二、生成各个.c .h文件1. exam.h2. exam.c3. mat.h4. mat.c5. main.c三、编译建立的文件1. 只编译不链接 main.o2. 使…

Vue实现任意内容展开 / 收起功能组件

博主介绍 📢点击下列内容可跳转对应的界面,查看更多精彩内容! 🍎主页:水香木鱼 🍍专栏:后台管理系统 文章目录 简介:这是一篇有关【Vue实现任意内容展开 / 收起功能组件】的文章&am…

1.jdk,数据类型,运算符

Java语言跨平台性的解释 一次编译,到处运行 将.java文件编译成.class文件,然后就可以在linux,windows运行。 java的跨平台的实现是通过在不同的操作系统上的不同的jvm差异来实现跨平台的 jdk jdk jre(jvmjavase核心类库&…

MySQL基础操作总结_CRUD

文章目录 1.新增 insert 1.1 单行数据全列插入 1.2 多行数据指定列插入 2.查询 select 2.1 全列查询 2.2 指定列查询 2.3 查询字段包含表达式 2.4 别名 2.5 去重:distinct 2.6 排序:order by 2.7 条件查询 2.7.1 where条件查询 2.7.2 and与or查询 2.7.3 范围查…

Java简介

Java是一门面向对象的编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论&#xff0…

Matplotlib 基础入门知识点总结

目录 1、绘图的一些基本命令展示 2、Matplotlib 绘制网格 3、plt.gca() 对坐标轴的操作 4、 图表的样式参数设计 5、创建图形对象 6、绘制多子图 1.add_axes():添加区域 2. subplot()函数,可以均等的划分画布 3.subplots()函数详解 7、柱形图的…

踩坑List.addAll抛出UnsupportedOperationException

转载标明出处: 公司内部博客,作者 居xx, 在此表示感谢 1、我自己遇到的问题 try { // 不加try..catch报错 java.lang.UnsupportedOperationException: null ,原因未知list.addAll(a.getResult());list.addAll(b.getResult());list.addAll(c.getResult());list.addAll(d.getResu…

双软认证是指哪两项证书认证

一、双软认证是指哪两项证书认证: “双软认证”:指软件产品等登记和软件企业认定;企业申请双软认证,除了获得软件企业和软件产品的认证资格外,也可以使企业享受国家对软件行业提供的税收优惠政策。 二、认证的好处 1、…

后量子密码学中的模数是多少?

密码学:后量子密码学中的模数是多少? 只要是从事网络安全或安全软件开发的人,就都可能已经了解过公钥加密以及在20世纪70年代末和80年代前后创建的方法。现在我们可能需要学习更多的理论,因为我们所学的方法可能会受到量子计算机的…

网页字体图标用法

目录前言引用流程1、打开网页2、选择自己喜欢的图标加入购物车3、下载图标4、引用引用前言 1、接下来介绍引用图标都是免费的,可以放心食用。 2、标签可以自己设计,用css、svg画图或者引用图片都可以。但我们设计的很难超过专业人员的设计。引用图片的画…

深入理解mvcc机制(详解)

深入理解mvcc机制一,MVCC定义1,undolog日志2,undolog版本控制链3,readView3.1,readview简介3.2,readview和undolog结合使用规则3.3,readview和undolog基本使用4,总结一,M…

Java学习----前端3

今日学习内容如下&#xff1a; JavaScript JavaScript是一种基于对象和事件驱动的客户端脚本语言动态、弱类型、基于原型&#xff0c;内置了支持类 解释器称为 JS 引擎&#xff0c;内置于浏览器中 ECMA 欧洲计算机制造商协会Hello world <input type"button" on…

与git相关错误的究极解决方案

没有科学上网导致的git推送和拉取错误&#xff0c;严重阻碍了搬砖进度&#xff0c;遇到的与git有关的错误&#xff1a; 1. gnutls_handshake() failed: The TLS connection was non-properly terminated. 2. Failed to connect to github.com port 443:connection timed out …

Postman 如何获取请求结果并设置到请求头中

目录1.设置环境变量2.获取token&#xff0c;并赋值给环境变量3.将环境变量添加到请求头Postman&#xff1a; 是一款用于接口调试和测试的开发工具&#xff0c;功能强大&#xff0c;使用简单。 无论是开发人员进行接口调试&#xff0c;还是测试人员做接口测试&#xff0c;Postma…

本地生活小程序有什么功能_本地生活小程序的优势

对于平台运营方 痛点&#xff1a;社区团购毛利偏低 零售行业竞争激烈&#xff0c;单纯依靠社区团购卖货整体毛利率较低 手中大量用户&#xff0c;缺少好的变现模式&#xff0c;迫切需要提升盈利能力。 优势&#xff1a;提升盈利&#xff0c;解决流量变现 本地生活属于轻资产…

8Manage:千万别忽视了供应商绩效管理

供应商绩效管理是采购管理流程中的一部分&#xff0c;现代企业几乎都会对供应商实行绩效考核。绩效管理的主要目的是了解供应商的表现、促进供应商改进&#xff0c;并为工业商奖励、供应商优化提供依据&#xff0c;以此来发现优质的供应商&#xff0c;及时改进不合格的供应商。…

Python控制自己的手机摄像头拍照,并把照片自动发送到邮箱

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 今天这个案例&#xff0c;就是控制自己的摄像头拍照&#xff0c; 并且把拍下来的照片&#xff0c;通过邮件发到自己的邮箱里。 想完成今天的这个案例&#xff0c;只要记住一个重点&#xff1a;你…

CSDN的MD编辑器【写作技巧】

CSDN的MD编辑器【写作技巧】在线LaTeX公式的编辑器快捷键&#xff0c;结合快捷键提高效率写作技巧在线LaTeX公式的编辑器 推荐去https://www.latexlive.com/在线LaTeX公式编辑器 将写好的公式代码复制过来。 然后复制在CSDN编辑器里面前后加上符合$就行了 前后加两个该符合就会…

Java环境安装即配置

一、java1.8的安装步骤 1 安装目录创建java文件夹 在想要安装java的目录下创建一个java文件夹,不能出现特殊符号和汉字、空格等 2 java文件夹内创建jdk和jre Java安装需要两部分,一个jdk一个jre 所以在java文件夹中创建两个文件夹 3 解压安装包 通过百度网盘分享的文件&#…

【论文精读3】MVSNet系列论文详解-P-MVSNet

P-MVSNet全名为“P-MVSNet: Learning Patch-wise Matching Confidence Aggregation for Multi-View Stereo”&#xff0c;名字当中反映了论文的核心模块即基于学习方法的分块匹配置信聚合模块&#xff0c;乍一看有点难理解&#xff0c;但看完本文肯定很清楚啦。 本文是MVSNet系…