Java【10】IO流与文件操作

Java IO流:全面解析与实践指南 Java IO流体系结构可以分为字节流和字符流两大分支。字节流用于处理二进制数据,而字符流用于处理字符数据,其内部是基于字节流进行处理的,但提供了更方便的字符处理方式。Java IO流提供了一套强大而灵活的API,用于处理各种输入输出操作。通过理解字节流和字符流的体系结构,掌握常用流类的使用方法,并结合实际应用场景进行实践,开发者能够在Java程序中高效地进行文件操作、网络通信以及数据处理与转换等任务。在实际开发中,根据具体需求选择合适的流类型和组合方式,能够提高程序的性能和可维护性。 阅读详情

1、I/O Streams

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据文件是基于byte(字节)而非bit(位)保存以及传输。1 byte = 8 bit。

一个字节(byte) = 8个二进制位(bit)

8个二进制位(bit),可以用十进制整数来表示!
即,一个字节可以用255以内的十进制整数来表示。
在这里插入图片描述
在这里插入图片描述
读取字节的十进制整数,然后去找到相应的字符,显示出来。

2、AutoCloseable

在这里插入图片描述
上图概念的代码实现:
在这里插入图片描述
资源如果没有被手动关闭,就会一直在内存中占用着!

用finally语句来关闭,关闭资源句一定会被执行:
在这里插入图片描述
在这里插入图片描述
// 但这个代码冗余度太高了,以后不用了,有新办法

★ AutoCloseable接口
【理解try-with-resources方法的使用!】
在这里插入图片描述
注意,①try语句和try块不是一个东西;②资源关闭和异常处理没有半毛钱关系。

★ 该方法实现了资源的自动关闭——
在这里插入图片描述
无论是否引发异常,都在try块执行完时自动关闭资源!!
在这里插入图片描述
在这里插入图片描述

3、ByteArrayBuffer

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、Paths

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、Files

懒得记了。。。都是些写好的方法,可以直接用。

6、编程例题

import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Comparator;

public class IOTest {
    
	public static void main(String[] args) throws IOException {
        
		String fileName = "C:/example/from.txt";

        System.out.println("----- 1、创建文件 ------");
        createFile(fileName);

        System.out.println("-----  2、将字符串写入文件 -------");
        // \r\n在txt文本中换行
        String str =
                "白日依山尽\r\n" +
                "黄河入海流\r\n" +
                "欲穷千里目\r\n" +
                "更上一层楼\r\n";
        writeToFile(fileName, str);

        System.out.println("--------- 3、基于基本IO流实现文件的复制 ----------");
        String toFile = "C:/example/to.txt";
        copyByIO(fileName, toFile);

        System.out.println("--------- 4、基于NIO实现文件的复制 ----------");
        String toFile2 = "C:/example/nio/to.txt";
        copyByNIO(fileName, toFile2);

        System.out.println("---------- 5、删除指定文件 -------------");
        deleteFile(toFile);
        
        System.out.println("---------- 6、遍历指定目录文件 -------------");
        String dir = "C:/example";
        walkDirectories(dir);
    }

    /**
     * 基于指定文件名称创建目录及文件
     * 如果文件已经存在,则忽略
     *
     * @param fileName
     * @throws IOException 
     */
    private static void createFile(String fileName) throws IOException {
    	Path dir = Paths.get(fileName);
    	Files.createDirectories(dir.getParent());// 创建目录,存在目录也不会抛出异常
    	try{
    		Files.createFile(dir);// 创建文件,若文件已经存在则会抛出异常
    		System.out.println("创建文件成功!文件位置:" + fileName);
    	}
    	catch(FileAlreadyExistsException e) {
    		System.out.println("文件 " + fileName + " 已存在,无需创建!");
    	}
    	System.out.println();
    }

    /**
     * 提示:文件以字节操作,因此可以
     * 字符串,转字节数组,直接基于Files写入文件
     * 
     *
     * @param fileName
     * @param content
     * @throws IOException 
     */
    private static void writeToFile(String fileName, String content) throws IOException{
    	String[] lines = content.split("\r\n"); // 先把要写入的字符串按行分割
    	try( BufferedWriter output = new BufferedWriter(new FileWriter(fileName)); ) {
    		for (String line: lines) {
    			output.write(line); // 写入一行(不含换行符)
    			output.newLine(); // 写入换行符
    		}
    		output.flush();
    		System.out.println("数据写入成功!文件位置:" + fileName);
    	}
    	System.out.println();
    }

    /**
     * 基于基本IO,以及字节数组缓冲区,复制文件
     * 打印显示循环读写循环次数
     *
     * @param sourceFile
     * @param targetFile
     * @throws IOException 
     */
    private static void copyByIO(String sourceFile, String targetFile) throws IOException {
    	
    	try( InputStream input = new FileInputStream(sourceFile);
    	     OutputStream output = new FileOutputStream(targetFile); ){
    		int size = 4;
    		byte[] buffer = new byte[size]; // 字节数组缓冲区,大小为size
    		int len;
    		int cnt = 0;
    		while( (len = input.read(buffer)) != -1) {
    			output.write(buffer, 0, len);
    			cnt++;
    		}
    		System.out.println(sourceFile + " -> " + targetFile + " 复制成功!");
    		System.out.println("字节数组缓冲区大小为" + size + "时,读写循环次数为" + cnt + "\n");
    	}
    }

    /**
     * 基于NIO,实现文件的复制
     *
     * @param sourceFile
     * @param targetFile
     * @throws IOException 
     */
    private static void copyByNIO(String sourceFile, String targetFile) throws IOException {
    	Path source = Paths.get(sourceFile);
    	Path target = Paths.get(targetFile);
    	Files.createDirectories(target.getParent());
    	Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); // 如果输出文件存在,则替换
    	System.out.println(sourceFile + " -> " + targetFile + " 复制成功!\n");
    }

    /**
     * 删除文件
     *
     * @param fileName
     * @throws IOException 
     */
    private static void deleteFile(String fileName) throws IOException {
    	Path dir = Paths.get(fileName);
    	Files.deleteIfExists(dir);
    	System.out.println(fileName + " 删除成功!\n");
    }

    /**
     * 遍历打印指定目录下全部目录/文件名称
     *
     * @param dir
     * @throws IOException 
     */
    private static void walkDirectories(String dir) throws IOException {
    	Path d = Paths.get(dir);
    	Files.walk(d)
    		//.sorted(Comparator.reverseOrder()) // 反向遍历
    		.forEach(System.out::println);
    }
    
}

在这里插入图片描述

用 Java 的 IO 流进行读写文件操作 在计算机领域里 IO,有时也写作I/O,是的缩写,也就是输入和输出。这里的输入和输出是指不同系统之间的数据输入和输出,比如读写文件数据,读写网络数据等等。同步阻塞 IO 即 BIO(blocking IO),指的主要是传统的 java.io 包,它基于流模型实现。java.io 包提供了我们最熟知的一些 IO 功能,比如 File 对象提供的文件和目录操作,还有一大块就是通过输入输出流读写文件等。 阅读详情

相关推荐

如何制作DOS启动盘 U盘制作DOS启动盘 HP-U盘启动DOS7 详细步骤教程 Intel网卡使用软件 bootutil lanconfig eeupdate Intel网卡修改MAC地址教程

制作DOS启动盘不是一项复杂的任务,只要按照以下简单的步骤进行操作,您就可以自己动手制作一个DOS启动盘。

lcy524514826的博客 896

java bytearraybuffer_Java中的字节数组buffer与字符串

读取socket请求输入流,获取其大小,根据大小申请相应大小字节数组byte[] buffer,将输入流读取到申请好的buffer字节数组中,最后,将其转换成字符串(转换可以跟第二个参数,指定字符编码,比如GBK或者UTF-8 等)。图片发自《Tomat与Java Web开发技术详解》同理,请求的输入流要从字节数组转为字符串才能打印出来,new String(byte[])那么响应的输出流要从字符...

weixin_29071809的博客 1729

华硕电脑Win10改Win7系统:BIOS设置详解

通过上述步骤,华硕电脑用户可以将系统从Windows 10更改为Windows 7。虽然这个过程可能涉及一些技术细节和潜在的风险(如数据丢失和驱动不兼容),但只要按照指南仔细操作并做好准备工作,大多数用户应该能够成功完成系统回滚。请记住,在进行任何系统更改之前都要备份重要数据,并确保已了解所有潜在的风险和限制。希望本文能够帮助到需要回滚到Windows 7的华硕电脑用户!

nntxthml的博客 2262

java bytearraybuffer_ByteArrayBuffer.java

//// ========================================================================// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.// -------------------------------------------------------------...

weixin_42455621的博客 769

数据分析学习总结笔记02:聚类分析及其R语言实现

** 数据分析学习总结笔记02:聚类分析Cluster Analysis ** 1. 聚类分析概述 1.1 聚类分析的直观理解 在科学研究、社会调查或日常生活中,通过观察个体的特征,将群体中的个体归为不同的族群/簇(Cluster)。 2. 聚类分析的方法 3. 聚类分析的应用 3.1 市场营销——精准营销 在市场营销中,基于消费者的历史交易信息、消费者背景等对消费者进行划分,从而对不同类型的消费...

weixin_41961559的博客 4420

python 携程登陆_Python 学习练习之用户登录接口

目的:用python实现简单用户注册,登陆,加黑功能,放个流程图吧。以下内容仅为练习 执行流程:[root@zabbix login]# python user_login.pyusername:tompassword:123456Are you want to register ? [y/n]yRegister successful,Please relogin ![root@zabbix lo...

weixin_28679635的博客 517

java.nio.ByteBuffer_NIO和ByteBuffer简单使用

前言最近在做一个串口相关的项目,里面频繁使用了对字节数组的处理,所以需要使用 ByteBuffer 来处理,于是就对这方面知识做一个简单的梳理和记录。NIOJava NIO 是 java 1.4 之后出的一套 IO 接口 NIO 中的 N 可以理解为 Non-blocking,不单纯是 New。NIO 的特性 / NIO 与 IO 区别:IO 是面向流的,NIO 是面向缓冲区的IO 流是阻塞的,N...

weixin_39912984的博客 579

激光条纹中心提取——Steger

激光条纹中心提取-Steger 好久没有记录了,记录一下今天学习的内容,据说Steger在激光条纹中心提取上神一般的存在。文章和代码都分享给大家了哈,其中有四个文件,3个C++,一个python,python一个抠图文件,3个c++包含背景图+原图, 单张图提取, 多张图提取。 分享代码 #include <opencv2\core.hpp> #include <opencv2\highgui.hpp> #include <opencv2\imgproc.hpp> #i

CharmsLUO的博客 5381

Java 8:活好水多——Java 的新IO (nio)

Java的IO体系:旧IO 新IO:nio,用ByteBuffer和FileChannel读写 nio通道管理:Selector Okio:io的封装,好像不关nio的事 Netty:目的是快速的实现任何协议的server和client端 所以说你可以用netty通过channel等实现一个httpclient,和URLConnection平级 这个课题太大了,应该分层次学: 第一层是官方的文档

则不达的专栏 1万+

Win本地部署DeepSeek

Ollama 提供了简单的接口,用于创建、运行和管理这些模型,同时还维护了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。重启ollama,具体操作为打开搜索ollama进程,将其结束进程,之后再执行相关模型下载命令即可,或重启电脑!Ollama支持多种DeepSeek模型版本,用户可以根据硬件配置选择合适的模型。配置添加系统环境变量OLLAMA_MODELS,设置其值为新的路径,点击确定应用。安装完成后,在终端输入以下命令,检查Ollama版本。:14B、32B或70B版本,适合高端GPU。

m0_67297673的博客 2391

大模型——Dify:知识库与外部知识库

摘要 Dify的知识库功能为开发者提供了动态知识管理解决方案,超越了大模型静态预训练数据的限制。知识库支持多种文档格式(如txt、pdf、docx等),通过文档分段、索引设置和检索优化机制提升LLM的响应准确性。系统提供高质量和经济两种索引模式,前者采用向量化检索技术,后者使用关键词匹配以降低成本。知识库支持元数据管理,包括自动生成的内置元数据和用户自定义元数据,便于内容分类和检索。对于高级需求,Dify还支持连接外部知识库,通过API实现跨平台数据共享和检索优化,满足企业级知识管理需求。

732

bytearraybuffer java_微信小程序arrayBuffer与java数据类型

java Netty-socket小程序websocket在数据传输过程有很多方式, 如:文件、json、xml、Buffer、byte等等方式. 数据越小传输的数据也就越快. 但也越麻烦.java数据类型.Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 前往查看byte、short、int、long、float、double、boolean...

weixin_32516005的博客 1126

购物车智能检测系统:YOLO26 + PyQt5 毕设实现

YOLO26 + PyQt5 完成购物车商品检测系统:标注数据集(OpenImages 筛选 + 自制 500 张),训练 100 epoch 得到 mAP50 约 0.89,集成商品定价后输出总价。建议先用 OpenImages 预训练权重在自制数据上调优(冻住 backbone 前 50 epoch),等 loss 稳定后再解冻全量训练。

m0_64661770的博客 56

[javase基础] java笔试题大全之IO流常见选择题

分析:BufferedReader类的参数只能是Reader类型的,不能是InputStream类型。以InputStream(输入流)/OutputStream(输出流)为后缀的是字节流;以Reader(输入流)/Writer(输出流)为后缀的是字符流。分析: skip(long n)该方法中的n指的是要跳过的字节数。1.下面哪个流类属于面向字符的输入流()选择一项)6.下面哪个流类属于面向字符的输入流()4.下面哪个流是面向字符的输入流()分析: ACD都是io到文件。分析:A:字符输出的缓冲流。

Netty711的博客 617

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java 文件操作与IO流

介绍 Java 如何进行文件操作以及IO 流的使用

熵减玩家 4709

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

郑州轻工业大学JAVA实验四IO流与文件操作

例如,它提供了print()和println()方法,可以将数据写入到输出流中,并自动添加换行符。(4).uufferedInputStream/BuufferedOutputStream:带缓存的输入流和输出流,它们可以提高字节流的读写效率,减少系统的IO操作次数。可以使用FileOutputStream类的构造方法创建一个文件输出流,然后通过该流写入数据到文件中。可以使用RandomAccessFile类的构造方法创建一个文件,然后通过该文件写入数据到文件中。基于不同的分类依据,说说流的分类。

m0_74582075的博客 3582

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java IO流:文件操作与数据读写全攻略

Java IO流核心概念与应用 本文介绍了Java IO流的核心概念和典型应用。IO流是编程中处理输入输出的关键机制,主要分为字节流(InputStream/OutputStream)和字符流(Reader/Writer)两大体系。文章详细讲解了FileInputStream和FileOutputStream的使用方法,包括单字节读取、缓冲区读取、文件写入等操作,并提供了文件复制的示例代码。IO流广泛应用于文件操作、网络通信、内存数据处理和设备交互等场景。

2402_88461821的博客 1788

Java-详解IO流原理及流的分类

Java IO原理 一、概述 (1)I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。 输入input:读取外部数据(磁 盘、光盘等存储设备的数据)到程序(内存)中。 输出output:将程序(内存)数据输出到磁盘、光盘等存储设 备中。 (2)Java程序中,对于数据的输入/输出操作以“流(stream)” 的方式进行。 (3) java.io包下提供了各种“流”类和接口,用以获取不同种 这里是引用 类的数据,并通过

weixin_52533007的博客 3188

Java IO流知识点总结

I(Input)O(Output) 通过IO可以处理程序与外部环境之间的数据传输。

weixin_43836337的博客 1869

java文件操作和IO流(详解)(๑•́ ₃ •̀๑)エー

java文件操作和IO流(详解)(๑•́ ₃ •̀๑)エー

2302_79862386的博客 1542

Java文件操作与IO流

Java文件操作与IO流

2402_89573492的博客 996

Java文件操作、IO流

文章目录1. File类1.1 File类概述和构造方法1.2 File类创建功能1.3 File类判断和获取功能1.4 File类删除功能2. 递归2.1 递归2.2 递归求阶乘2.3 递归遍历目录3. IO流3.1 IO流概述和分类3.2 字节流写数据3.3 字节流写数据的三种方式3.4 字节流写数据的两个小问题3.5 字节流写数据加异常处理3.6 字节流读数据(一次读一个字节数据)3.7 字节流复制文本文件3.8 字节流读数据(一次读一个字节数组数据)3.9 字节流复制图片4. 字节缓冲流4.1 字节

terence的博客 5112

Java IO 流与文件操作

IO流主要用于文件的输入输出操作,Java提供了丰富的类来处理IO流,包括字节流和字符流。字节流主要操作原始二进制数据,而字符流则将字节数据转化为字符数据。

weixin_66244070的博客 954

Java的File与IO流

File类位于java.io包下,是文件和目录路径名的抽象表示,提供了一系列对文件和文件夹本身操作的方法,它不能读写数据。read(字节数组)一次性读取多个字节,注意要判断实际读取的字节到底有多少,以免错误地读取字节数组之前遗留的数据。默认缓冲池大小为8KB。注意:File类是路径名的抽象表示,构建一个File实例并不会创建一个文件,不管文件是否存在,都可以创建任意文件名的File实例。[] listFiles() 一级文件对象数组,包含隐藏文件,无权限访问则为null,主调为文件也为null。

m0_73077892的博客 1829

java学习——IO流

FileInputStream:文件输入流BufferedInputStream:缓冲字节输入流ObjectInputStream:对象字节输入流(类的继承关系)通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定通过使用文件描述符fdObj创建一个FileInputStream,该文件描述符表示到文件系统中的某个实际文件的现有连接。

m0_73245690的博客 1164

Java - IO流 - 详细文件操作

Java 中的文件操作是通过 I/O 流来实现的。I/O 流分为两大类:输入流和输出流。每一类又分为字节流和字符流。Java 提供了丰富的 I/O API 来处理各种文件操作,包括字节流和字符流的读写、文件递归查找、文件的创建、删除、复制和移动等操作。通过灵活运用这些工具,可以方便地处理文件相关的任务。希望本文能帮助你更好地理解 Java 中的文件操作。如果你有任何问题或需要进一步了解某个操作,可以随时提问!

DeL的博客 3664
上一篇: Java【9】线程
下一篇: NLP【1】NLP入门知识笔记
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值