当前位置: 首页 > 编程日记 > 正文

Java基础知识回顾之六 ----- IO流

前言

在上一篇文章中,回顾了Java的多线程。而在本篇文章中主要介绍Java IO的相关知识。

IO的介绍

什么是IO?

IO的名称又来是Input与Output的缩写,也就是输入流和输出流。输入流用于从源读取数据,输出流用于向目标写数据。

可以从下列示例图来了解IO流:
1138196-20180616215244409-846822604.jpg

IO流使用

IO流对文件的操作主要分为字符流和字节流。

字符流

字符流有两个抽象类:WriterReader类。
其对应子类FileWriterFileReader可实现文件的读写操作。
BufferedWriterBufferedReader能够提供缓冲区功能,用以提高效率。

我记得在开始学习Java不久的时候, 在教程中会使用 字符流来进行字符的读取和写入。比较常见的就是,运行一个main方法,然后再控制台输入字符,获取输入的字符做一些逻辑控制之类。
例如: 在控制台输入字符,输入quit退出,输入其它的字符打印。

代码示例:

    public static void main(String[] args)  {try {test();} catch (IOException e) {e.printStackTrace();}}private static void test() throws IOException {String str;// 使用 System.in 创建 BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("输入字符, 输入 'quit' 退出。");// 读取字符do {str=br.readLine();System.out.println("您输入的字符是:"+str);} while(!str.equals("quit"));br.close();}

然后我们输入 helloquit
结果如下:

输入字符, 输入 'quit' 退出。
hello
您输入的字符是:hello
您输入的字符是:
quit
您输入的字符是:quit

通过上述示例我们可以简单的了解下了字符流。
一般来说,我们主要用字符流的情况是读写文件,大部分也是文本文件,比如.txt后缀的。这里我们也顺便介绍下如何使用。

代码示例:

    /**** 写入和读取文件* @throws IOException*/private static void test2() throws IOException {//创建要操作的文件路径和名称  String path ="E:/test/hello.txt";String str="hello world";FileWriter fw = new FileWriter(path);  fw.write(str);  fw.close();  FileReader fr = new FileReader(path);  StringBuffer sb=new StringBuffer();while(fr.ready()){sb.append((char)fr.read());}System.out.println("输出:"+sb.toString());fr.close();}

注:如果在不同的系统上运行,可以使用 File.separator方法,该方法表示系统的分隔符。

输出结果:

输出:hello word

上述代码示例中,我们使用FileWriterFileReader 这两个类对文件进行读写,虽然可以实现字符的写入和读取,但是效率并不高,因为是对磁盘的直接读写。一般对于文件的读写,我们会使用缓冲。使用缓冲的好处就像 倒垃圾一样,将垃圾进行整理堆积,然后到了一定的规模在丢弃,而不是有一点垃圾就倒一次。

那么在上述的代码中加上BufferedWriterBufferedReader类来进行缓冲。

代码示例:

    /*** 写入和读取文件* @throws IOException*/private static void test3() throws IOException {//创建要操作的文件路径和名称  String path ="E:/test/hello.txt";String str="你好!";FileWriter fw = new FileWriter(path);  BufferedWriter bw=new BufferedWriter(fw);bw.write(str);  bw.close();fw.close();  FileReader fr = new FileReader(path);  BufferedReader br=new BufferedReader(fr);StringBuffer sb=new StringBuffer();while(br.ready()){sb.append((char)br.read());}System.out.println("输出:"+sb.toString());br.close();fr.close();}

注:需要注意的是关闭的顺序,先关闭缓冲,再关闭文件。

字节流

字节流也有两个抽象类:InputStreamOutputStream类。
其对应子类有FileInputStreamFileOutputStream实现文件读写操作。
BufferedInputStreamBufferedOutputStream提供缓冲区功能

字节流也能对文本进行读取,但是它的主要使用的场景是读取无法直接获取文本信息的二进制文件,比如音乐文件、视频文件、图片文件等等。
这里我们依旧对文件进行读取和写入,不过我们把之前写入到hello.txt文件的内容加上 '你好' 写入到新的文件中。由于这里使用的了中文,所以需要设置相应的编码。

代码示例:

 /*** 创建一个文件并读取记录 * @throws IOException*/private static void test4() throws IOException {String path="E:/test/hello.txt";String path2="E:/test/你好.txt";String str="你好!";//从文件读取数据InputStream input = new FileInputStream(path);InputStreamReader reader = new InputStreamReader(input, "UTF-8");StringBuffer sb=new StringBuffer();while(reader.ready()){sb.append((char)reader.read());}input.close();reader.close();//创建一个文件并向文件中写数据OutputStream output = new FileOutputStream(path2);OutputStreamWriter writer = new OutputStreamWriter(output, "UTF-8");writer.write(sb+str);writer.close();output.close();//从文件读取数据InputStream input2 = new FileInputStream(path2);InputStreamReader reader2 = new InputStreamReader(input2, "UTF-8");StringBuffer sb2=new StringBuffer();while(reader2.ready()){sb2.append((char)reader2.read());}System.out.println("输出:"+sb2);input2.close();reader2.close();}   

结果:

    输出:hello world你好!

可以看到结果符合我们的预期。

File

学习IO流中,我们也会接触File类。
File类中主要是对文件夹的一些操作。比如,文件夹的创建、删除、查看等等。
这里我们就简单的介绍下File类的相关使用,还是使用代码配合注释来进行说明。

代码示例:

private static void test5() throws IOException {String path="E:/test/test2";String path2="E:/test/test3/test3";String path3="E:/test/test2/test2.txt";File f = new File(path);File f2 = new File(path2);File f3 = new File(path3);//创建文件夹System.out.println("="+f.mkdir());//创建文件夹和所有父文件夹System.out.println("=="+f2.mkdirs());//创建一个文本System.out.println("==="+f3.createNewFile());//获取名称System.out.println("==="+f3.getName());//获取父级名称System.out.println("==="+f3.getParent());//获取当前路径System.out.println("==="+f3.getPath());//判断是否是目录System.out.println("=="+f2.isDirectory());System.out.println("==="+f3.isDirectory());//删除该文件System.out.println("==="+f3.delete());  
}   

输出结果:

=true
==true
===true
===test2.txt
===E:\test\test2
===E:\test\test2\test2.txt
==true
===false
===true

关于File类的相关只是简单的介绍了下,具体的使用还需要配置实际的场景。需要注意的是,在进行文件创建和删除的时候,需要先判断是否存在,否则将抛出异常。

其它

到此,本文就结束了,谢谢阅读!欢迎留言和点赞,你的支持是我写作最大的动力!

版权声明:
作者:虚无境
博客园出处:http://www.cnblogs.com/xuwujing
CSDN出处:http://blog.csdn.net/qazwsxpcm    
个人博客出处:http://www.panchengming.com

转载于:https://www.cnblogs.com/xuwujing/p/9191546.html

相关文章:

选择、分组、引用,指定匹配的位置

正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的特殊字符.字符| 用于分隔供选择的字符.例如: /ab|cd|ef/ 匹配的是字符串 "ab",或者是字符串 "cd",又或者 "ef". /\d{3}|[a-z]{4}/ 匹配的是要么是一个三位数,要么是四个小写…

用Graphviz来画图 1

做了一个系统,通过配置来完成一些简单或者复杂的产品逻辑, 系统投入使用以后, 产品人员在上面配置了不少产品,产品的流程都是存放在一个xml里面,前几天突然有个想法, 打算把这个流程通过图形表示出来&#…

hung-yi lee_p12_深度学习简介

文章目录三个步骤step 1fully connect feedforward network神经网络原理从非DL到DL什么变了step 2step 3backpropagation注意这是篇头重脚轻的博客。大部分都在讲step1,2、3是飞快过去。三个步骤 step 1 许许多多的逻辑回归(神经元)模型组成…

openGL学习笔记(1)——常用方法原型解释

1、初始化,设置背景色 void glClear(int mask) 清除缓存 实參含义:GL10.GL_COLOR_BUFFER_BIT 清除颜色缓存 GL10.GL_DEPTH_BUFFER_BIT 清除深度缓存 希望同时清除多个缓存,将实參用或(|)连接即可 void …

让VBCommenter支持自定义用户名

在使用VBCommenter生成XML格式的注释时&#xff0c;发现在<history></history>标签内的用户名是登陆系统的用户名&#xff0c;而我们的用户名一般是一些简称或其它英文名等&#xff0c;这样在注释中想记录开发人员的真实姓名就必须手工修改&#xff0c;颇不方便。是…

模拟器抓取https方法

说明&#xff1a;为了解决安卓手线上不能抓取https请求&#xff0c;以下整理通过模拟器抓取https请求方法如下&#xff1a;前置条件&#xff1a;安卓模拟器1、夜神抓包工具&#xff1a;fiddler、charles不要安装证书 第一步安装模拟器 可以按照夜神模拟器步骤省略 第二步de.rob…

hung-yi lee_p15_机器学习深层网络比浅层网络好在哪

文章目录疑问-为什么要那么多层简单解释以语音识别为例语音识别基础GMM的方法的缺陷深度学习的高明之处回到问题-为什么一层能解决还要多层从电子工程(EE)角度解释一个电路的例子日常角度解释剪窗花Deep Learning的优点适用于参数少的情况End-to-end Learning面临复杂问题疑问-…

从WEB SERVICE 上返回大数据量的DATASET

前段时间在做一个项目的时候,遇到了要通过WEB SERVICE从服务器上返回数据量比较大的DATASET,当然&#xff0c;除了显示在页面上以外&#xff0c;有可能还要用这些数据在客户端进行其它操作。查遍了网站的文章,问了一些朋友,也找了一些解决方法. 众所周知,如果不用其它方…

ORACLE解决登陆em状态暂挂方法

1、找到oracle安装目录中db_1/计算机名_orcl/sysman/config/emd.properties &#xff0c; 用记事本打开emd.properties&#xff0c;在emd.properties文件 最后一行 的agentTZRegionGMT改为 agentTZRegionAsia/Chungking2、在dos 窗口输入 set oracle_sidorcl emctl stop dbcon…

VBA注释临时

Sub shishi() 按ABCDE为多选题定义答案; A&#xff0e;沙利度胺 B&#xff0e;异烟肼 C&#xff0e;利福平 d.氯法齐明 E.氨苯砜 46&#xff0e;各型麻风病的首选药物为(D) A&#xff0e;沙利度胺 B&#xff0e;异烟肼 C&#xff0e;利福平 d.氯法齐明 E.氨苯砜 45&#xf…

hung-yi lee_p13_反向传播

文章目录背景链式法则计算思路梯度计算过程/反向传播总结背景 回顾神经网络中计算梯度&#xff0c;更新梯度的过程 这里面的问题是&#xff0c;梯度是一个上百万维的向量&#xff0c;计算出来并非易事 这就引出了反向传播 可以说反向传播是梯度下降在神经网络中的实现。 链式…

介绍两个非常好用的Javascript内存泄漏检测工具

内存泄漏对开发者来说一般很难检测因为它们是由一些大量代码中的意外的错误引起的&#xff0c;但它在系统内存不足前并不影响程序的功能。这就是为什么会有人在很长时间的测试期中收集应用程序性能指标来测试性能。 最简单的检测内存泄漏的方式是用任务管理器检查内存使用情况。…

全局化和本地化

区域性En 英语en-CA 加拿大英语af-ZA 南非荷兰语eu 巴斯克语kn-IN 埃纳德语 印度tr 土耳其语Cy-uz-UZ 乌兹别克语 西里尔字母表Lt-uz-UZ 乌兹别克语 拉丁文字母表zh-CHT 繁体中文zh-CHS 简体中文设置当前区域性System.Threading.Thread.CurrentThread.CurrentCulture new Sys…

lvm讲解和磁盘故障案例

一&#xff1a;lvm讲解1.准备磁盘分区fdisk /deb/sdbn创建三个新分区&#xff0c;分别为1Gt改变分区类型为8e2.pvcreate /dev/sdb1yum install -y lvm [rootcentos7-1 ~]# yum install -y lvm 已加载插件&#xff1a;fastestmirror base …

hung-yi lee_p17_卷积神经网络

文章目录背景&#xff1a;卷积层池化层摊平KerasCNN学到了什么Deep DreamDeep Style怎么把CNN用在下围棋上为什么可以将CNN用于下围棋CNN更多应用背景&#xff1a; DNN拿掉一些参数就成CNN 为什么可以这样做 每一个神经元只需要图中的一部分就可以识别出想要的模式 更小的区域…

抓住青春的尾巴再愤青一把

这是今天google大神查到的&#xff1a;一、CAPCOM的《大神》&#xff0c;PS2专属ACT游戏&#xff0c;以三大神之一的日照处天子为原型&#xff0c;动作爽快华丽&#xff0c;是我期待很久的作品&#xff0c;预计今冬发售。 ... 并不是说这个水墨3D是大宇搞出来的DD&#xff0c;3…

the folder is already a source folder.

在新建的maven项目中&#xff0c;新建src/main/java时&#xff0c;提示the folder is already a source folder. 解决办法&#xff1a;右键工程&#xff0c;build path--configure build path--source&#xff0c;删除src/mian/java&#xff0c;再建src/main/java时即可。转载于…

selenium webdriver - 结束进程

1 import org.openqa.selenium.WebDriver;2 import org.openqa.selenium.firefox.FirefoxDriver;3 import org.openqa.selenium.os.WindowsUtils;4 /*5 * 结束进程6 */7 public class KillProcess {8 9 public static void main(String[] args) { 10 //结束进程 …

白盒测试的3中主要方法(cont.)

文章目录白盒测试简介逻辑覆盖测试法SCDCCCCDCMCCMCDC基本路径测试法BPC测试的四个步骤循环路径覆盖法白盒测试简介 静态白盒测试也称为结构化分析。 动态白盒测试又称为结构化测试。 以下所说的应该均属于动态白盒测试。 逻辑覆盖测试法 SC sentence coverage 语句覆盖 设…

CRichEdit小记

使用前要AfxInitRichEdit2(); 修改背景颜色和字体颜色 CRichEditCtrl* p(CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT21);CHARFORMAT2 cf;memset((char*)&cf,0,sizeof(cf));COLORREF color;color RGB(0,255,0);cf.dwMask CFM_COLOR;cf.crTextColor color; //The text color…

学习3dmax(四)

今天没有怎么做东西&#xff0c;是再看一些理论的东西。这个是再网上看到的&#xff0c;虽然说的是如何学习3dmax&#xff0c;但是我个人认为学习任何一种技术都应该如此。1. 把MAX当成一门新的课程学习&#xff08;和MAYA没啥关系&#xff01;真的。&#xff09;&…

ES6深拷贝与浅拷贝

小感在前 React学习与开发过程要经历一个相当长的准备阶段&#xff0c;此前看阮一峰老师的文章中&#xff0c;他就特别提到这一点。但是&#xff0c;由于React框架或者说是一种优秀的前端架构实在太诱人&#xff0c;所以&#xff0c;掌握这项技术所涉及的技术栈过程中经历的任何…

hung-yi lee_p22_无监督学习:词嵌入

文章目录原视频地址&#xff1a;添加链接描述输入是一个词 输出是一个向量 整个过程无监督 用来训练的是一堆文章 精神&#xff1a; 根据一个词汇的上下文来理解它 具体&#xff1a; 1.count based 两个词经常一起出现&#xff0c;认为它们是相似的 2.prediction-based 给神经…

用vs2010打开使用vs2013升级后的WP工程

项目在win7vs2010的环境中建立的&#xff0c;后来在win8.1vs2013的环境下修改和完善&#xff1a; 但是所有功能实现后发现wp7项目在使用vs2013打开后因为单向升级的原因&#xff0c;项目只能被编译为wp8项目&#xff08;win8.1vs2013无法安装wp7的sdk&#xff0c;提示不兼容&am…

神州6号发射成功了--庆祝一下

转载于:https://www.cnblogs.com/ccBoy/archive/2005/10/12/253268.html

android保持服务不休眠(持续运行)以及唤醒屏幕的方法

假设有这样一个应用场景&#xff0c;一个服务一直在默默的工作&#xff08;比如即时地获取服务器的消息&#xff09;&#xff0c;即使在屏幕已经因为长时间无操作而关闭&#xff0c;或者用户按了电源键让屏幕关闭&#xff0c;手机进入休眠状态&#xff0c;他必须依然在工作中。…

三类常见软件质量(Quality Attribute)属性的通俗解释

外部质量 用户关心 正确性&#xff0c;最最基本的质量属性&#xff0c;对应功能需求&#xff0c;其他QA多对应非功能需求。健壮性&#xff0c;在异常情况下正常运行的能力。 包含容错能力和恢复能力。恢复没有容错健壮。可靠性&#xff0c;用平均无bug运行时间与平均bug修复时…

winform动态的文字效果

效果图如下 private void Form1_Load(object sender, EventArgs e){Graphics Car_Paint panel1.CreateGraphics();//实例化绘图对象string Car_Str "青岛**软件公司";//定义要绘制的动态文字Character character new Character();//实例化自定义类对象character.D…

使用Mycat构建MySQL读写分离、主从复制、主从高可用

数据库读写分离对于大型系统或者访问量很高的互联网应用来说&#xff0c;是必不可少的一个重要功能。 从数据库的角度来说&#xff0c;对于大多数应用来说&#xff0c;从集中到分布&#xff0c;最基本的一个需求不是数据存储的瓶颈&#xff0c;而是在于计算的瓶颈&#xff0c;…

SharePoint的Reporting Service Viewer Web Part

今天本来打算做一个专门用于Reporting Service报表浏览的SharePoint web part&#xff0c;记得在Reporting Service 2000下有一个viewer的Sample&#xff0c;就想找来参考一下&#xff0c;谁知在C:\Program Files\Microsoft SQL Server\90\Tools\Reporting Services\SharePoint…