(1-6-4) Java IO流实现文件的读取与写入

目录

0.前述概要

1. File类

1.1 概述

1.2 File的重要方法

1.3 java.io

1.3.1 四种抽象类

1.3.2 流

1.3.3 其他常用 I/O 流

2. 字节输入流(InputSteam)

2.1  关系类图

2.2 应用实现

3. 字节输出流(OutputStream)

3.1  概述与类图

3.2 应用实现

4. 字符输出流 Reader  &  字符输出流

5. 将字节流转换为字符流(InputStreamReader & OutputStreamWriter)

5.1 InputStreamReader

5.2 OnputStreamWriter

6. 缓冲区

6.1 缓冲区的作用

6.2 通过 BufferReader 实现整行读取数据

7. 利用URLConnection对象下载网络图片


0.前述概要


1. File类

1.1 概述

  • File类  是java.io  包下  代表与平台无关的   文件和目录
  • 程序中操作文件和目录,都可以通过File 类完成。File能新建、删除、重命名文件和目录
  • File 类不能访问文件内容本身。需要使用输入/输出流访问文件内容本身

1.2 File的重要方法

public class FileDemo {public static void main(String[] args) {// 1 新建文件对象File file1 = new File("d:/vb.txt");File file2 = new File("d:\\vc.html");// 1.1 创建文件try{boolean f1 = file1.createNewFile();boolean f2 = file2.createNewFile();// 1.2 获取文件路径  、 获取文件名  、 文件是否存在System.out.println(file1.getPath()+ "["+file1.getName()+"], 创建成功?:"+ f1);// 1.3 文件是否存在System.out.println(file2.getPath()+ "["+file2.getName()+"], 已存在?:"+ file2.exists());// 1.4 是否是目录or目录 、 文件大小System.out.println(file2.getName()+"文件?:" + file1.isFile() + " , 大小: " + file1.length());System.out.println(file2.getName()+"目录?:" + file2.isDirectory() + " , 大小: " + file2.length());// 1.5 删除文件System.out.println(file1.getPath() + "删除成功?:"+ file1.delete() + ",是否存在:" + file1.exists());}catch(IOException e){e.printStackTrace();}// 2 创建目录对象File dir1  = new File("d:/game/游戏/王者荣耀/戈雅");File dir2  = new File("d:/貂蝉");File dir3  = new File("d:/game/游戏/王者荣耀/夏洛特");try{boolean d1 = dir1.mkdirs();boolean d2 = dir2.mkdir();boolean d3 = dir3.mkdirs();System.out.println(dir1.getPath() + ",创建成功:?" + d1 + ",存在:?" + dir1.exists());System.out.println(dir2.getPath() + ",创建成功:?" + d2 + ",存在:?" + dir2.exists());System.out.println(dir3.getPath() + ",创建成功:?" + d3 + ",存在:?" + dir3.exists());dir1.delete();dir2.delete();}catch (Exception e){e.printStackTrace();}}
}

1.3 java.io

  • Java的 IO相关操作 通过  java.io包下的类或接口  来支持
  • 按  出入的方向可分为: 输入与输出
  • 按  内容类型可分为: 字节流与字符流
1.3.1 四种抽象类
  1. 字节输入流   -   InputStream 
  2. 字节输出流   -   OutputStream 
  3. 字符输出流   -   Reader
  4. 字符输出流   -   Writer
1.3.2 流

        Java把传输的数据抽象成为流Stream),简化了程序处理

1.3.3 其他常用 I/O 流


2. 字节输入流(InputSteam)

2.1  关系类图

2.2 应用实现

  1. 实例化 InputSream 对象
  2. 调用 read()方法  循环读取   字节数据   ,  进行处理 
  3. 调用 close() 方法  关闭InputStream对象
import java.io.*;// 实现以 字节流  方式读取  文件数据
public class InputStreamDemo {public static void main(String[] args) throws FileNotFoundException {//  1.1  实例化 File 对象File source1 =  new File("d:/game/游戏/王者荣耀/夏洛特/xlt.txt");File source2 =  new File("d:/game/游戏/王者荣耀/夏洛特/xlt.png");InputStream fis = null;try{// 1.2  实例化 InputStream 对象
//            fis = new FileInputStream(source1);fis = new FileInputStream(source2);// 2.1 定义 读取单位块  数组
//            byte[] bs = new byte[1024];byte[] bs = new byte[1024*1024];int len;// 2.2 调用 read()方法 循环读取 字节数据  进行处理while((len = fis.read(bs)) != -1){System.out.println(len);    //16     //375477}}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();} finally{if(fis != null){try{// 3 调用 close() 方法, 关闭InputStream对象fis.close();}catch(IOException e){e.printStackTrace();}}}}
}

3. 字节输出流(OutputStream)

3.1  概述与类图

3.2 应用实现

  1. 实例化 OutputStream 对象
  2. 调用write()  循环写入  字节数据
  3. 调用close() 关闭 OutputStream 对象
import java.io.*;/** 需求:** 实现  以字节流的方式 读取文件数据* 再  以字节流的方式  输出到其他文件中** ==》  即实现文件内容的复制*/
public class OutputStreamDemo {public static void main(String[] args) throws FileNotFoundException {//  1.1  实例化 File 对象File source1 =  new File("d:/game/游戏/王者荣耀/夏洛特/xlt.txt");File source2 =  new File("d:/game/游戏/王者荣耀/夏洛特/xlt.jpg");//  A.1 实例化 File 对象File target = new File("d:/copy_xlt.png");InputStream fis = null;OutputStream fos = null;try{// 1.2  实例化 InputStream 对象
//            fis = new FileInputStream(source1);fis = new FileInputStream(source2);// A.2  实例化 OutputStream 对象fos = new FileOutputStream(target);// 2.1 定义 读取单位块  数组
//            byte[] bs = new byte[1024];byte[] bs = new byte[1024*1024];int len;// 2.2 调用 read()方法 循环读取 字节数据  进行处理while((len = fis.read(bs)) != -1){System.out.println(len);    //16     //375477// B. 调用write()  循环写入  字节数据fos.write(bs, 0, len);}}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();} finally{// 通过finally块  确保fos & fis对象执行close方法if(fos != null){try{// C. 调用close() 关闭 OutputStream 对象fos.close();}catch(IOException e){e.printStackTrace();}}if(fis != null){try{// 3 调用 close() 方法, 关闭InputStream对象fis.close();}catch(IOException e){e.printStackTrace();}}}}/*** java.io.FileNotFoundException: d:\game\游戏\王者荣耀\夏洛特\xlt.png (系统找不到指定的文件。)* 	at java.io.FileInputStream.open0(Native Method)* 	at java.io.FileInputStream.open(FileInputStream.java:195)* 	at java.io.FileInputStream.<init>(FileInputStream.java:138)* 	at OutputStreamDemo.main(OutputStreamDemo.java:25)*/
}

4. 字符输出流 Reader  &  字符输出流

  • Reader 是  所有字符输入流    的抽象父类
  • Writer 是   所有字符输出流   的抽象父类
  • FileReader 与  FileWriter  分别对应了  文本文件的  读取与写入

Code:  应用字符输入输出流实现文本  读取与写入

import java.io.*;/**  需求:*   应用字符输入输出流实现文本   读取与写入*/
public class ReaderAndWriterDemo {public void readTextFile(){Reader reader = null;try{// 实例化 file  对象File file = new File("d:/game/游戏/王者荣耀/夏洛特/xlt.txt");// 实例化 FileReader 对象reader = new FileReader(file);int ch = 0;while((ch = reader.read())!= -1){
//                System.out.print(ch+"  ");   //  UTF-8 编码集    打印的是ASCLL 码System.out.print((char)ch+ "  ");   //  UTF-8 编码集    打印的是字符}}catch(IOException e){e.printStackTrace();}finally{try{if(reader != null){reader.close();}}catch(IOException e){e.printStackTrace();}}}public void writerTextFile(){Writer writer = null;try{// 实例化 File 对象File file =  new File("d:/game/游戏/王者荣耀/夏洛特/xlt.txt");// 若这个文件不存在  ,则新建一个文件。if(!file.exists()){file.createNewFile();}// 实例化writer对象writer = new FileWriter(file);// write() 方法用于  --->  覆盖已有的文件内容writer.write("起手技!");writer.write("玫瑰剑士即剑神!");// append() 方法用于 --->   再已有文件末尾追加内容writer.append("Append被动:七星光芒剑");}catch(IOException e){e.printStackTrace();}finally{if(writer != null){try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}public static void main(String[] args) {ReaderAndWriterDemo r = new ReaderAndWriterDemo();
//        r.writerTextFile();/*** 起手技!玫瑰剑士即剑神!Append被动:七星光芒剑*/r.readTextFile();/*** 29611  29808  21073  22763  21363  21073  31070  65281  65  112  112  101  110  100  34987  21160  65306  19971  26143  20809  33426  21073** 玫  瑰  剑  士  即  剑  神  !  A  p  p  e  n  d  被  动  :  七  星  光  芒  剑*/}
}import java.io.*;/**  需求:*   应用字符输入输出流实现文本   读取与写入*/
public class ReaderAndWriterDemo {public void readTextFile(){Reader reader = null;try{// 实例化 file  对象File file = new File("d:/game/游戏/王者荣耀/夏洛特/xlt.txt");// 实例化 FileReader 对象reader = new FileReader(file);int ch = 0;while((ch = reader.read())!= -1){
//                System.out.print(ch+"  ");   //  UTF-8 编码集    打印的是ASCLL 码System.out.print((char)ch+ "  ");   //  UTF-8 编码集    打印的是字符}}catch(IOException e){e.printStackTrace();}finally{try{if(reader != null){reader.close();}}catch(IOException e){e.printStackTrace();}}}public void writerTextFile(){Writer writer = null;try{// 实例化 File 对象File file =  new File("d:/game/游戏/王者荣耀/夏洛特/xlt.txt");// 若这个文件不存在  ,则新建一个文件。if(!file.exists()){file.createNewFile();}// 实例化writer对象writer = new FileWriter(file);// write() 方法用于  --->  覆盖已有的文件内容writer.write("起手技!");writer.write("玫瑰剑士即剑神!");// append() 方法用于 --->   再已有文件末尾追加内容writer.append("Append被动:七星光芒剑");}catch(IOException e){e.printStackTrace();}finally{if(writer != null){try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}public static void main(String[] args) {ReaderAndWriterDemo r = new ReaderAndWriterDemo();
//        r.writerTextFile();/*** 起手技!玫瑰剑士即剑神!Append被动:七星光芒剑*/r.readTextFile();/*** 29611  29808  21073  22763  21363  21073  31070  65281  65  112  112  101  110  100  34987  21160  65306  19971  26143  20809  33426  21073** 玫  瑰  剑  士  即  剑  神  !  A  p  p  e  n  d  被  动  :  七  星  光  芒  剑*/}
}

5. 将字节流转换为字符流(InputStreamReader & OutputStreamWriter)


5.1 InputStreamReader

FileReader其实可以完全实现这样的功能

Code实现

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;public class InputStreamReaderDemo {public void changeReadDemo(){FileInputStream fis = null;InputStreamReader isr = null;try{// 实例化 File 对象File file =  new File("d:/game/游戏/王者荣耀/夏洛特/xlt.txt");// 实例化 FileInputStream 对象fis = new FileInputStream(file);// 实例化 InputStreamReader 对象// 将 字节流 转换为  字符流isr = new InputStreamReader(fis,"UTF-8");while(isr.ready()){
//                System.out.println(isr.read());System.out.print((char)isr.read());}}catch(IOException e){e.printStackTrace();}finally{if(isr != null){try{isr.close();}catch(IOException e){e.printStackTrace();}}if(fis != null){try{fis.close();}catch (IOException e){e.printStackTrace();}}}}public static void main(String[] args) {InputStreamReaderDemo reader = new InputStreamReaderDemo();reader.changeReadDemo();/*** 29611* 29808* 21073* 22763* 21363* 21073* 31070*//*** 玫瑰剑士即剑神!Append被动:七星光芒剑*/}
}

5.2 OnputStreamWriter

需求:

实现 将字节输出流转换成  字符输出流

/**需求* 实现 将字节输出流转换成  字符输出流*/
public class OutputStreamWriterDemo {public void changeWriter(){FileOutputStream fos = null;OutputStreamWriter osw = null;try{// 实例化 File 对象File file =  new File("d:/game/游戏/王者荣耀/夏洛特/xlt.txt");if(!file.exists()){// 创建文件file.createNewFile();}fos = new FileOutputStream(file);//实现 将字节输出流转换成  字符输出流osw = new OutputStreamWriter(fos, "UTF-8");osw.append("追加:qlj这是xlt的核心前提");osw.write("写入:qlj这是xlt的核心前提");}catch (IOException e){e.printStackTrace();}finally{try{if(osw != null){osw.close();}if(fos != null){osw.close();}}catch (IOException e){e.printStackTrace();}}}public static void main(String[] args) {OutputStreamWriterDemo demo = new OutputStreamWriterDemo();demo.changeWriter();}/*** 追加:qlj这是xlt的核心前提写入:qlj这是xlt的核心前提*/
}

6. 缓冲区

6.1 缓冲区的作用

6.2 通过 BufferReader 实现整行读取数据

/** 需求: 实现BufferReaderDemo内容的整行读取* 通过 BufferReader 实现整行读取数据*/
import java.io.*;/** 需求: 实现BufferReaderDemo内容的整行读取* 通过 BufferReader 实现整行读取数据*/
public class BufferReaderDemo {public void readBuffer(){Reader reader = null;BufferedReader br = null;try{// 1. 实例化 File 对象File file =  new File("D:\\s_java\\se\\6-4io\\ioProj\\src\\main\\java\\BufferReaderDemo.java");// 2. 实例化 FileReader 对象reader = new FileReader(file);// 3. 实例化 BufferedReader 对象br =  new BufferedReader (reader);String line = null;while((line = br.readLine()) != null){System.out.println(line);}}catch (IOException e){e.printStackTrace();}finally{try{if(br != null){br.close();}if(reader != null){reader.close();}}catch (IOException e){e.printStackTrace();}}}public static void main(String[] args) {BufferReaderDemo demo = new BufferReaderDemo();demo.readBuffer();}/*** public class BufferReaderDemo {**     public void readBuffer(){*         Reader reader = null;*         BufferedReader br = null;*         ....*/
}

7. 利用URLConnection对象下载网络图片

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;/*** 利用URLConnection对象下载网络图片*/
public class URLConDownLoadImg {public static void main(String[] args) {// 声明一个输入流InputStream is = null;OutputStream os = null;try{URL url = new URL("https://img2.baidu.com/it/u=144558109,2991279374&fm=253&app=138&f=JPEG?w=1570&h=800");URLConnection con = url.openConnection();is = con.getInputStream();os = new FileOutputStream("D:\\game\\游戏\\王者荣耀\\夏洛特\\金色xlt.png");byte[] buffer = new byte[1024];int len = 0;while((len = is.read(buffer)) != -1){
//                System.out.println(len);os.write(buffer, 0, len);}}catch (MalformedURLException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}finally{try{if(os != null){os.close();}if(is != null){is.close();}}catch (IOException e){e.printStackTrace();}}}/*** 1024* 1024* 1024* 1024* 1024* ...* 1024* 354*/
}

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

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

相关文章

【Proteus仿真】【32单片机-A010】步进电机控制系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD显示当前挡位、方向等&#xff1b; 2、按键控制步进电机挡位、方向等。 二、使用步骤 系统运行后&#xff0c;LCD1602显示当前挡位、方向&#xff1b; 通过按键…

DeepSeek-R1-0528-Qwen3-8B为底座微调领域大模型准备:制作领域专用数据集

前言 想要微调领域大模型,数据的准备是必不可少的。然而微调大模型需要的数据极多,这样花费很多人力和准备。有没有方便又高效的方法?一下子就可以准备大量的领域专用数据集呢? 制作领域专用数据集 这里制作的数据集格式为使用的aphaca格式的 1.启动vllm服务 python -m…

WEB3全栈开发——面试专业技能点P6后端框架 / 微服务设计

一、Express Express是国内大部分公司重点问的。我在本文最后&#xff0c;单独讲解了Express框架。 概念介绍 Express 是基于 Node.js 平台的极简、灵活且广泛使用的 Web 应用框架。它提供了一系列强大的功能&#xff0c;用于构建单页、多页及混合型的 Web 应用程序和 API 服…

游戏开发中的CI/CD优化案例:知名游戏公司Gearbox使用TeamCity简化CI/CD流程

案例背景 关于Gearbox&#xff1a; Gearbox 是一家美国电子游戏公司&#xff0c;总部位于德克萨斯州弗里斯科&#xff0c;靠近达拉斯。Gearbox 成立于1999年&#xff0c;推出过多款史上最具代表性的视频游戏&#xff0c;包括《半衰期》、《战火兄弟连》以及《无主之地》。 团队…

视觉slam--三维刚体运动

线性代数 外积与矩阵乘法的等价性 欧拉角的奇异性--万向死锁 现象 第二个轴旋转度&#xff0c;会导致第三个旋转轴和恶原始坐标轴的第一个旋转轴重合&#xff0c;导致第一次旋转与第三次旋转都使用了同一个轴进行旋转&#xff0c;也就是本质上旋转三次&#xff0c;但是只在两个…

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…

CppCon 2015 学习:REFLECTION TECHNIQUES IN C++

关于 Reflection&#xff08;反射&#xff09; 这个概念&#xff0c;总结一下&#xff1a; Reflection&#xff08;反射&#xff09;是什么&#xff1f; 反射是对类型的自我检查能力&#xff08;Introspection&#xff09; 可以查看类的成员变量、成员函数等信息。反射允许枚…

R语言速释制剂QBD解决方案之一

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…

“详规一张图”——新加坡土地利用数据

在城市规划和土地管理领域&#xff0c;精确且详尽的空间数据是进行有效决策的基石。随着地理信息系统&#xff08;GIS&#xff09;技术的发展&#xff0c;我们能够以前所未有的精度和细节来捕捉、分析和展示土地利用信息。这不仅提升了数据的质量和可靠性&#xff0c;还使得城市…

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…

MySQL自定义函数零基础学习教程

1. 引言 想象一下&#xff0c;你在用计算器做数学题。每次计算"圆形面积"时&#xff0c;你都要输入&#xff1a;3.14 半径 半径。如果能把这个计算步骤保存起来&#xff0c;下次只要输入半径就自动算出面积&#xff0c;那该多方便&#xff01; MySQL自定义函数就…

八股---7.JVM

1. JVM组成 1.1 JVM由哪些部分组成?运行流程? 难易程度:☆☆☆ 出现频率:☆☆☆☆ Java Virtual Machine:Java 虚拟机,Java程序的运行环境(java二进制字节码的运行环境)好处:一次编写,到处运行;自动内存管理,垃圾回收机制程序运行之前,需要先通过编译器将…

企业级AI-DevOps工具链的构成及实现方案

企业级AI-DevOps工具链的构成及实现方案 DevOps在AI大模型研发中的重要性及应用背景一、场景驱动的AI产品研发运营机制二、AI-DevOps生产线建设三、基于DevOps的AI大模型研发机制四、基于DevOps的智能体场景研发机制五、场景驱动的应用评估分析机制 DevOps在AI大模型研发中的重…

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…

在 Win10 上 WSL 安装 Debian 12 后,Linux 如何启动 SMTP 服务?

在 WSL 的 Debian 12 中启动 SMTP 服务&#xff08;以 Postfix 为例&#xff09;&#xff0c;请按以下步骤操作&#xff1a; 1. 安装 Postfix sudo apt update sudo apt install postfix mailutils安装过程中会弹出配置窗口&#xff1a; General type of mail configuration&a…

树莓派超全系列教程文档--(59)树莓派摄像头rpicam-apps

这里写目录标题 rpicam-apps libcamera 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 rpicam-apps 树莓派操作系统 Bookworm 将相机捕捉应用程序从 libcamera-\* 重命名为 rpicam-*。符号链接允许用户暂时使用旧名称。尽快采用新的应用程序名称…

【数据结构】图论最短路径算法深度解析:从BFS基础到全算法综述​

最短路径 导读一、最短路径1.1 单源最短路径1.2 各顶点间的最短路径1.3 最短路径算法 二、BFS算法结语内容回顾下一篇预告&#xff1a;挑战带权最短路径&#xff01; 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 欢迎继续探索图算法的…

中国政务数据安全建设细化及市场需求分析

(基于新《政务数据共享条例》及相关法规) 一、引言 近年来,中国政府高度重视数字政府建设和数据要素市场化配置改革。《政务数据共享条例》(以下简称“《共享条例》”)的发布,与《中华人民共和国数据安全法》(以下简称“《数据安全法》”)、《中华人民共和国个人信息…

Linux信号保存与处理机制详解

Linux信号的保存与处理涉及多个关键机制&#xff0c;以下是详细的总结&#xff1a; 1. 信号的保存 进程描述符&#xff08;task_struct&#xff09;&#xff1a;每个进程的PCB中包含信号相关信息。 pending信号集&#xff1a;记录已到达但未处理的信号&#xff08;未决信号&a…