Java之IO流学习总结
流:可以理解为数据的流动,就是一个数据流,IO流最终要以对象来体现
流的分类:
按照流的方向:输入流和输出流 (输入流只能进行读操作,输出流只能进行写操作)
按照处理数据的不同:字节流与字符流 (若处理的数据是纯文本类型的用字符流,其他全用字节流)
字节流:处理字节数据的流对象,无论是图片、文字、视频,他都可以以二进制存储,所以字节流可以
处理设备上的所有数据,当然也包含字符数据,只不过字符流处理字符数据更高效。
字符流:因为每个国家的字符都不一样,所以涉及到了字符编码问题,在获取中文字节数据的同时+指定的编码表
才可以正确解析数据,为了方便解析,将字节流与编码表等装成对象,这个对象就是字符流。只要处理纯字符数据
就优先考虑字符流。
注意:流的操作只有两种:读和写。
流的体系共有四个基类,都是抽象类:
字节流:InputStream OutputStream
字符流:Reader Writer
在这四个系统中,他们的子类名后缀都是父类名,前缀都是这个子类的功能名称 例子FileInputStream
BufferedWriter与BufferedReader,是用来给字符的输出流提高效率用的,意味着缓冲区对象建立时,必须要先有流对象
明确要提高具体的流对象效率
总结:
1.当需要读取时使用InputStream Reader
当需要写入时使用OutputStream Writer
2.纯文本数据:Reader(读取) Writer(写入)
非文本数据:InputStream(读取) OutputStream(写入)
PS:读取是从从内存读取,写入是写到外部文件
3.如果是对文件操作使用Filexxx的对象,键盘System.in或者System.out
4.键盘录入:要加缓冲这样可以大大提高效率
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
close()和flush()的区别:
flush():将缓冲区的数据刷到目的地中后,流可以使用。
close():将缓冲区的数据刷到目的地中后,流就关闭了,该方法主要用于结束调用的底层资源。这个动作一定做。
在io操作中一定要写close()方法来释放资源,另外最好将其写在finally()方法中,这样即使抛出异常也可以关闭流
public class JavaFileWriter {
public static void main(String[] args) throws IOException{
/**
* 1.FileWriter创建一个字符输出流对象,用于操作文件,该对象一旦建立,就必须明确数据存储位置,是一个文件
* 2.对象创建后,会在堆内存中有一个实体,同时在指定的位置创建了一个存储数据的文件
* 3.如果指定位置出现了同名文件,文件会被覆盖
*/
File file = new File("F:\\demo1.txt");
// FileWriter fw = null;
//
// fw = new FileWriter(file);
// //调用write方法写入字符串,字符串并未直接写到目的地,而是写入了流中(其实是写入到了内存缓冲区中)
// fw.write("aaaaaaa");
// fw.flush();//刷新缓冲区,将缓冲区中的数据写到目的文件
// fw.close();//关闭流,在关闭前会先刷新流。
//
// /**
// * FileWriter创建可以读取文本的流对象,
// */
// FileReader fr = null;
// fr = new FileReader(file);
// int ch = 0;
// while((ch=fr.read())!=-1){//未读到结尾
// System.out.print((char)ch);
// }
// fr.close();
/**
* 读取文件的第二种方法,设置缓冲区,速度更快
*/
// FileReader fr = new FileReader(file);
// char[] buf = new char[1024];
// int len = 0;
// while((len=fr.read(buf))!=-1){//将最多b.length个字节的数据读入byte数组
// System.out.println(new String(buf,0,len));
// }
// fr.close();
/**
* 采用字节流缓冲区实现读取
*/
// FileInputStream fis = new FileInputStream(file);
// byte[] buf = new byte[1024];
// int len = 0;
// while((len = fis.read(buf))!=-1){//将最多b.length个字节的数据读入byte数组
// System.out.println(new String(buf, 0, len)); //从byte数组输出buf中的数据
// }
// fis.close();
/**
* 键盘输入对象写入文件
* 利用BufferedReader实现键盘输入,使用BufferedWriter实现写入文件
*
*/
//long startTime = System.currentTimeMillis();
FileWriter fw = new FileWriter(file);
BufferedReader bufferreader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferwriter = new BufferedWriter(fw);
String line;
while((line = bufferreader.readLine())!=null){//readLine方法返回的时候是不带换行符的
bufferwriter.write(line);
bufferwriter.newLine();
bufferwriter.flush();
}
bufferreader.close();
bufferwriter.close();
// long endTime = System.currentTimeMillis();
// float excTime=(float)(endTime-startTime)/1000;
// System.out.println("执行时间:"+excTime+"s");
}
}
实现文件的copy
public class JavaStream {
public static void main(String[] args) throws IOException {
System.out.println();
File source = new File("D:\\11.txt");
File target = new File("D:\\22.txt");
JavaStream js = new JavaStream();
js.copyFile(source, target);
}
public void copyFile(File source,File target) throws IOException{
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(source); //输入流用来读取源文件中的数据
out = new FileOutputStream(target);//输出流用来接收源文件的数据并写入目标文件
byte[] buffer = new byte[1024];//类似于缓冲,先将byte数组填满,再进行接收提高效率
int bytesRead;
while((bytesRead = in.read(buffer))>0){
out.write(buffer, 0, bytesRead); //
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
in.close();
out.close();
}
}
}
Java之IO流学习总结的更多相关文章
- java的Io流学习
Java中io流的学习(一)File:https://blog.csdn.net/qq_41061437/article/details/81672859 Java中io流的学习(二)FileInpu ...
- Java之IO流学习总结【上】
一.什么是流? 流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由地控制文件.内存.IO设备等数据的流向. ...
- Java之IO流学习总结【下】
2.字节流 |-- InputStream(读) |-- OutputStream(写) 由于字节是二进制数据,所以字节流可以操作任何类型的数据,值得注意的是字符流使用的是字符数组char[]而字节流 ...
- JAVA.IO流学习笔记
一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- Java IO流学习总结八:Commons IO 2.5-IOUtils
Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...
- Java IO流学习总结(1)
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...
- (转载) java:IO流学习小结
今天刚刚看完Java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...
随机推荐
- 基于Python语言使用RabbitMQ消息队列(一)
介绍 RabbitMQ 是一个消息中间人(broker): 它接收并且发送消息. 你可以把它想象成一个邮局: 当你把想要寄出的信放到邮筒里时, 你可以确定邮递员会把信件送到收信人那里. 在这个比喻中, ...
- AMD 规范
AMD(异步模块定义)是为浏览器环境设计的,因为 CommonJS 模块系统是同步加载的,当前浏览器环境还没有准备好同步加载模块的条件. AMD 定义了一套 JavaScript 模块依赖异步加载标准 ...
- 洛谷【P2629】好消息,坏消息
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://www.luogu.org/problemnew/show/P2629 ...
- 编译cef 2526
fetch --nohooks chromium cd /path/to/chromium/src# git checkout -b 51.0.2704.103 refs/tags/51.0.2704 ...
- Erlang tool -- lager overload protection
log 这个事, 说大不大说小又不小. 大点的, 可以用scribe flume 这样的系统去做, 小点的, 也就打印一个调试信息而已. 在Erlang 中, log 这事情确实比较伤, error_ ...
- GPIO编程2:使用GPIO监听中断完整程序
一个完整的使用GPIO捕捉中断的程序: #include<stdlib.h> #include<stdio.h> #include<string.h> #inclu ...
- hihoCoder#1079(线段树+坐标离散化)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学 ...
- C Primer Plus学习笔记(二)- 数据和C
从一个简单的程序开始 #include <stdio.h> int main(void) { float weight; float value; printf("Please ...
- PHP函数(六)-匿名函数(闭包函数)
匿名函数能够临时创建一个没有名称的函数,常用作回调函数参数的值 <?php $test = function($a){ echo "Hello,".$a; }; $test( ...
- Windows安装mysql 5.7.*.zip步骤
1.去官网上下载.zip格式的文件. 2.解压到一个文件夹,这里我用D:\MySql表示 3.在D:\MySql\mysql-5.7.17-winx64下新建my.ini配置文件 黄色背景色的地方需要 ...