Java I/O (输入/输出)

1.流的概念

        流是一种有序的数据序列,根据操作类型,可以分为输入流和输出流两种。I/O流(输入输出)提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。

        1.1 输入流:

        程序从指向源的输入流中读取源中的数据,源可以是文件、网络、压缩包、其他数据。

        1.2 输出流:

        输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据吧信息传递到目的地。输出流的目标可以是文件、网络、压缩包、控制台、其他数据输出目标。

2.输入/输出流

        Java中所有的输入/输出流分为【字节输入/输出流】和【字符输入/输出流

2.1 字节输入流:InputStream类

        InputStream类是字节输入流的抽象类,是所有字节输入流的父类,该类中所有方法遇到错误都会发生IOException异常。

2.1.1 read()方法:

        从输入流中读取数据的下一个字节,返回0~255范围内的int字节值,如果到达流末尾而没有可用字节,则返回-1;

2.1.2 read(byte[] b)方法:

        从输入流中读取一定长度的字节,并以整数的形式返回字节数;

2.1.3 mark(int readlimit)方法:

        在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数;

2.1.4 reset()方法:

        将输入指针返回到当前所做的标记处;

2.1.5 skip(long n)方法:

        跳过输入流上的n各字节,并返回实际跳过的字节数;

2.1.6 markSupported()方法:

        如果当前流支持mark()/reset()操作就返回true;

2.1.7 close()方法:

        关闭此输入流,并释放与该流有关联的所有系统资源;

2.2 字节输入流:Reader类    

    

2.3 字节输出流:OutputStream类

        OutputStream类是字节输出流的抽象类,此抽象类是所有字节输出流类的父类(超类)。OutputStream类的所有方法都返回void,在遇到错误时都会引发IOException异常。

2.2.1 write(int b)方法:

        将指定的字节写入此输出流;

2.2.2 write(byte[] b)方法:

        将b个字节从指定的byte数组中写入到此输出流;

2.2.3 write(byte[] b, int off, int len)方法:

        将指定的byte数组b中从偏移量off开始的len个字节写入此输出流;

2.2.4 flush()方法:

        彻底完成输出并清空缓存区;

2.2.5 close()方法:

        关闭输出流,并释放与该流有关联的所有系统资源;

2.4 字符输出流:Writer类

3.File类

        File类是java.io包中唯一代表磁盘文件本身的对象。可以同File类中的方法来实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录,文件的长度,文件的读写权限等。

3.1 文件的创建与删除

使用File类创建文件对象有3种方法:

3.1.1 File(String pathname)

        此构造方法通过将指定的路径名字符串转换为抽象路径名,来创建一个新的File实例。

语法:

File file = new File(String pathname);

pathname为指定路径名称(包含文件名),如:File file = new File("/chuntian/word.txt")

3.1.2 File(String parent, String child)

        此构造方法根据定义父路径和子路径字符串(含文件名)创建一个新的File对象。

语法:

File file = new File(String parent, String child);

parent:父路径字符串,如“D:/doc”;

child:子路径字符串,如“word.txt”

3.1.3 File(File f, String child)

语法:

File file = new File(File f, String child);

f:父路径对象,如“D:/doc/”;

child:子路径字符串,如“word.txt”;

        通过File类创建一个文件对象后,如File file = new File("word.txt"),如果当前目录中不存在名为word.txt的文件,File类会通过调用createNewFile()方法创建一个名称为word.txt的文件;如果存在word.txt文件,可以通过调用文件对象的delete()方法删除这个文件。

package io;import java.io.File;
import java.io.IOException;public class FileTest {public static void main(String[] args) {File file = new File("./word.txt");   //创建文件对象fileif (file.exists()) {file.delete();      //如果文件存在就删除文件System.out.println("文件已删除~");} else {try {file.createNewFile();       //如果文件不存在,创建文件System.out.println("文件已创建!");} catch (IOException e) {e.printStackTrace();}}}
}输出:文件已创建!

3.2 获取文件信息

File类提供了很多方法来获取文件本身的信息,如:

File类的常用方法
方法返回值说明
getName()String获取文件的名称
canRead()boolean判断文件是否可读
canWrite()boolean判断文件是否可写
exist()boolean判断文件是否存在
length()long获取文件的长度(以字节byte为单位)
getAbsolutePath()String获取文件的绝对经
getParent()String获取文件的父路径
isFIle()boolean判断文件是否为文件
isDirectory()boolean判断文件是否为一个目录
isHidden()boolean判断文件是否为隐藏文件
LastModified()long获取文件最后修改时间
package io;import java.io.File;
import java.io.IOException;public class FileTest {public static void main(String[] args) {File file = new File("word.txt");   //创建文件对象fileif (file.exists()) {System.out.println("文件名称是:" + file.getName());System.out.println("文件长度是:" + file.length());System.out.println("该文件是隐藏文件吗?" + file.isHidden());System.out.println("文件的绝对路径是:" + file.getAbsolutePath());} else {System.out.println("该文件不存在");}}
}输出:文件名称是:word.txt文件长度是:8该文件是隐藏文件吗?false文件的绝对路径是:/Users/jeanet/IdeaProjects/MyProject/word.txt

4.文件输入/输出流

4.1 字节的输入/输出:FileInputStream类和FileOutputStream类

        FileInputStream类是inputStream类的子类;

        构造方法:

        4.1.1 FileInputStream(String name)

                使用给定的文件名创建一个FileInputStream对象;

        4.1.2 FileOutputStream(File file)

                使用File对象创建FileInputStream对象;

        FileOutputStream类是outputStream类的子类。

        FileOutputStream与FileInputStream的构造方法类似,创建FileOutputStream对象时可以指定一个不存在的文件名,但此文件不能是一个已被其他程序打开的文件。

package io;import java.io.*;public class FileTest {public static void main(String[] args) {File file = new File("word.txt");   //创建文件对象filetry {FileOutputStream fos = new FileOutputStream(file);  //创建一个FileOutputStream对象String mystr = "希望在田野上,我爱春田~";byte[] mybyte = mystr.getBytes();  //创建byte型数组fos.write(mybyte);      //将byte数组中的信息写入文件中fos.close();            //关闭流} catch (Exception e) {e.printStackTrace();    //输出异常信息}try {FileInputStream fis = new FileInputStream(file);    //创建FileInputStream对象byte[] mybyte = new byte[1024];     //创建byte数组int len = fis.read(mybyte);         //读取文件信息String fileinfo = new String(mybyte, 0, len);System.out.println("文件中的信息是:" + fileinfo);fis.close();} catch (Exception e) {e.printStackTrace();}}
}输出:文件中的信息是:希望在田野上,我爱春田~

4.2 字符的输入/输出:FileReader类和FileWriter类

        4.2.1 FileReader

                FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就能顺序地读取源文件中的字符内容,直到源的末尾或流被关闭。

        4.2.2 FileWriter

package io;import java.io.*;public class FileTest {public static void main(String[] args) {File file = new File("word.txt");   //创建文件对象filetry {FileWriter fw = new FileWriter(file);   //创建FileWriter字符对象fw.write("春天在哪里呀?");fw.close();} catch (Exception e) {e.printStackTrace();    //输出异常信息}try {FileReader fr = new FileReader(file);   //创建FileReader对象char[] mychar = new char[1024];     //创建char型数组int len = fr.read(mychar);      //将字节读入数组String mystr = new String(mychar, 0, len);    //设置文本域的显示信息System.out.println("文件内容是:" + mystr);} catch (Exception e) {e.printStackTrace();}}
}输出:文件内容是:春天在哪里呀?

5.带缓存的输入/输出流

        缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区,有了缓存区,在流上执行skip()、mark()、reset()方法就成为了可能。

5.1 字节的缓存输入/输出:BufferedInputStream类和BufferedOutputStream类

        BufferedInputStream类和BufferedOutputStream类可以对所有的InputStream类和OutputStream类进行带缓存区的包装以达到性能优化;

        构造方法:

        5.1.1 BufferedInputStream(InputStream in)      

        创建了一个带32个字节的缓存流;

        5.1.2 BufferedInputStream(InputStream in, int size)

        按指定大小来创建缓存区。

        5.1.3 BufferedOutputStream(OutputStream out)

        创建了一个带32个字节的缓存流;

        5.1.4 BufferedOutputStream(OutputStream out, int size)

        按指定大小来创建缓存区。

        flush()方法只对使用缓存区的OutputStream类的子类有效,用于在缓存区没满的情况下,也将缓存区的内容强制写入到外设,当调用close()方法时,系统在关闭流之前,也会将缓存区中的信息刷新到磁盘文件中。

5.2 字符的缓存输入/输出:BufferedReader类和BufferedWriter类

        BufferedReader类继承了Reader类,BufferedWriter类继承了Writer类,这两个类同样具有缓存机制,可以以行为单位进行输入/输出。

        5.2.1 BufferedReader类常用方法

                5.2.1.1 read()方法:

                读取单个字符;

                5.2.1.2 readLine()方法:

                读取一个文本行,并将其返回为字符串。若无数据可读,返回null;

        5.2.2 BufferedWriter类常用方法

                5.2.2.1 write(String s, int off, int len)方法:

                写入字符串的某一部分;

                5.2.2.2 flush()方法:

                刷新该流的缓存;

                5.2.2.3 newLine()方法:

                写入一个行分隔符;

        在使用BufferedWriter类的write()方法时,数据并没有立即写入输出流,而是首先进入缓存区中,如果想立刻将缓存区中的数据写入输出流,一定要调用flush()方法。

package io;import java.io.*;public class Student {public static void main(String[] args) {String[] content = {"好久不见", "最近好吗?", "常联系~"};File file = new File("word.txt");try {FileWriter fw = new FileWriter(file);       //创建FileWriter对象BufferedWriter bw = new BufferedWriter(fw); //创建BufferedWriter对象for (int i = 0; i < content.length; i++) {bw.write(content[i]);   //将字符串数组中的元素写入到磁盘文件bw.newLine();}bw.close();fw.close();} catch (Exception e) {e.printStackTrace();}try {FileReader fr = new FileReader(file);   //创建FileReader对象BufferedReader br = new BufferedReader(fr); //创建BufferedReader对象int i = 0;String s = null;while ((s = br.readLine()) != null) {i++;System.out.println("第" + i + "行的内容是:" + s);}br.close();fr.close();} catch (Exception e) {e.printStackTrace();}}
}输出:第1行的内容是:好久不见第2行的内容是:最近好吗?第3行的内容是:常联系~

6.数据输入/输出流

6.1 DataInputStream

6.2 DataOutputStream

7.ZIP压缩输入/输出流

7.1 压缩文件:ZipOutputStream(OutputStream out)

7.2 解压缩文件:ZipInputStream(InputStream in)

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

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

相关文章

【Overload游戏引擎细节分析】standard材质Shader

提示&#xff1a;Shader属于GPU编程&#xff0c;难写难调试&#xff0c;阅读本文需有一定的OpenGL基础&#xff0c;可以写简单的Shader&#xff0c;不适合不会OpenGL的朋友 一、Blinn-Phong光照模型 Blinn-Phong光照模型&#xff0c;又称为Blinn-phong反射模型&#xff08;Bli…

【C++项目】高并发内存池项目第八讲 项目总结和面试问题分享

项目总结面试分享 1.项目总结1.1优点1.2不足1.3面试常见问题 2.面试分享项目部分C语法部分 项目源代码&#xff1a;高并发内存池 1.项目总结 1.1优点 增加动态申请的效率减少陷入内核的次数减少系统内存碎片提升内存使用率尽量减少锁竞争应用于多核多线程场景 1.2不足 当前…

视频增强修复软件Topaz Video AI mac中文版支持功能

Topaz Video AI mac是一款使用人工智能技术对视频进行增强和修复的软件。它可以自动降噪、去除锐化、减少压缩失真、提高清晰度等等。Topaz Video AI可以处理各种类型的视频&#xff0c;包括低分辨率视频、老旧影片、手机录制的视频等等。 使用Topaz Video AI非常简单&#xff…

Lua脚本语言

1. 概念 Lua&#xff08;发音为"loo-ah"&#xff0c;葡萄牙语中的"lua"意为月亮&#xff09;是一种轻量级的、高效的、可嵌入的脚本编程语言。官网Lua最初由巴西计算机科学家Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo于1993年开…

MySQL(2):环境搭建

1.软件下载 软装去官网下载&#xff08;社区版&#xff09;&#xff1a;https://downloads.mysql.com/archives/installer/&#xff08;历史版本可选&#xff09; 选择下面的&#xff0c;一步到位 2.软件安装 双击 .msi 文件 选完 Custom 自定义后点 next 按 1&#xff0c…

Spring本地jar包依赖项目改为maven依赖

1.简介 我们在做项目的时候&#xff0c;可能会偶尔接手较为古老的项目&#xff0c;这些项目使用了较为老旧的版本管理或依赖管理方法&#xff0c;对于新开发项目来说&#xff0c;这些老旧的依赖管理方式会影响开发效率&#xff0c;所以&#xff0c;一般我们会选择将老项目的依…

asp.net旅游交流管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 旅游交流管理信息系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c# 语言开发 asp.net旅游交流网站1 应用技…

Gateway服务网关

本篇资料&#xff1a;https://gitee.com/Allengan/cloud-demo.githttps://gitee.com/Allengan/cloud-demo.git 目录 1.为什么需要网关 2.gateway快速入门 1&#xff09;创建gateway服务&#xff0c;引入依赖 2&#xff09;编写启动类 3&#xff09;编写基础配置和路由规则…

【JVM】字节码文件的组成部分

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 一、字节码文件的组成部分1.1 iconst_0…

Affinity Photo 2.2.1 高端专业Mac PS修图软件

Affinity Photo Mac中文版是一款面向专业摄影师和其他视觉艺术家的专业图像处理软件&#xff0c;拥有众多专业高端功能&#xff0c;如Raw处理、PSD导入和导出、16位通道的编辑和ICC色彩管理以及兼容大量图片格式。是现在最快、最顺、最精准的专业修图软件。Affinity Photo Mac是…

【3妹教我学历史-秦朝史】1 秦朝初期

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 2哥 :3妹&#xff0c;在干嘛呢 3妹&#xff1a;读书呢…

框架安全-CVE 复现SpringStrutsLaravelThinkPHP漏洞复现

目录 服务攻防-框架安全&CVE 复现&Spring&Struts&Laravel&ThinkPHP概述PHP-开发框架安全-Thinkphp&Laravel漏洞复现Thinkphp-3.X RCEThinkphp-5.X RCELaravel框架安全问题- CVE-2021-3129 RCE JAVAWEB-开发框架安全-Spring&Struts2Struts2框架安全…

基于闪电搜索算法的无人机航迹规划-附代码

基于闪电搜索算法的无人机航迹规划 文章目录 基于闪电搜索算法的无人机航迹规划1.闪电搜索搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用闪电搜索算法来优化无人机航迹规划。 …

使用requests库进行HTTP爬虫编程

目录 一、安装requests库 二、发送HTTP请求 三、解析HTML页面 四、处理HTTP响应和异常 五、使用代理和会话管理 六、使用多线程或多进程提高效率 七、数据存储和处理 八、注意事项和总结 在当今的数字化世界中&#xff0c;数据已经成为了一种宝贵的资源。而网络爬虫程序…

【每日一题】59. 螺旋矩阵 II

给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#xff1a;n 1 输出&…

基于SSM的会员卡管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【ChatGPT 01】ChatGPT基础科普

1. 从图灵测试到ChatGPT 1950年&#xff0c;艾伦•图灵(Alan Turing)发表论文**《计算机器与智能》&#xff08; Computing Machinery and Intelligence&#xff09;&#xff0c;提出并尝试回答“机器能否思考”这一关键问题。在论文中&#xff0c;图灵提出了“模仿游戏”&…

HarmonyOS开发:NodeJs脚本实现组件化动态切换

前言 上篇文章&#xff0c;我们使用NodeJs脚本完成了HarmonyOS项目的组件化运行&#xff0c;但是由于脚本是基于4.0.0.400版本的DevEco Studio开发的&#xff0c;可能在配置文件的修改上有些许差距&#xff0c;那么遇到这种情况怎么办&#xff0c;一种是再写一套针对性的脚本文…

【教3妹学编辑-算法题】H 指数 II

3妹&#xff1a;2哥早啊&#xff0c; 新的一周开始了&#xff0c;奥利给&#xff01;&#xff01;&#xff01; 2哥 :3妹&#xff0c;今天起的很早嘛&#xff0c;精神也很饱满。 3妹&#xff1a;昨天睡的早&#xff0c;早睡早起好身体&#xff01; 2哥&#xff1a;既然离时间还…

JavaScript_Pig Game保存当前分数

上个文章我们基本上完成了摇色子和切换当前玩家的功能。 现在我们开始写用户选择不再摇骰子的话&#xff0c;我们将用户的当前分数存入到持有分数中&#xff01; ● 首先我们应该利用一个数组去存储两个用户的分数 const scores [0, 0];● 接着我们利用数组来对分数进行累…