流:可以理解为数据的流动,就是一个数据流,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流学习总结的更多相关文章

  1. java的Io流学习

    Java中io流的学习(一)File:https://blog.csdn.net/qq_41061437/article/details/81672859 Java中io流的学习(二)FileInpu ...

  2. Java之IO流学习总结【上】

    一.什么是流? 流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由地控制文件.内存.IO设备等数据的流向. ...

  3. Java之IO流学习总结【下】

    2.字节流 |-- InputStream(读) |-- OutputStream(写) 由于字节是二进制数据,所以字节流可以操作任何类型的数据,值得注意的是字符流使用的是字符数组char[]而字节流 ...

  4. JAVA.IO流学习笔记

    一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...

  5. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  6. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...

  7. Java IO流学习总结(1)

    Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...

  8. (转载) java:IO流学习小结

    今天刚刚看完Java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...

  9. Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter

    在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...

随机推荐

  1. 利用HTML5开发Android笔记(上篇)

    资源来自于www.mhtml5.com 杨丰盛老师成都场的PPT分享 一个很简明的demo 可以作为入门基础 学习的过程中做了点笔记 整理如下 虽然内容比较简单 但是数量还是比较多的 所以分了3篇 ( ...

  2. switch case 语法

    switch (条件){ case 第一种: 执行语句 break: case 第二种情况: 执行语句 break: default: 执行语句: break: }

  3. Arc083_F Collecting Balls

    传送门 题目大意 给定$N$,在$(1,0),(2,0)......(N,0)$和$(0,1),(0,2)...(0,N)$上都有$1$个机器人,同时给定$2N$个坐标$(x,y),x,y\in[1, ...

  4. POJ2411Mondriaan's Dream(DP+状态压缩 or 插头DP)

    问题: Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after prod ...

  5. Laser

    Petya is the most responsible worker in the Research Institute. So he was asked to make a very impor ...

  6. LeetCode LFU Cache

    原题链接在这里:https://leetcode.com/problems/lfu-cache/?tab=Description 题目: Design and implement a data str ...

  7. 神秘常量!用0x077CB531计算末尾0的个数,32位数首位相连

    大家或许还记得 Quake III 里面的一段有如天书般的代码,其中用到的神秘常量 0x5F3759DF 究竟是怎么一回事,着实让不少人伤透了脑筋.今天,我见到了一段同样诡异的代码.     下面这个 ...

  8. Jenkins关闭、重启,Jenkins服务的启动、停止方法。

     一.Jenkins关闭.重启 1.关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit,关闭Jenkins服务. 例如:http://localhost:8081/ex ...

  9. 关于Java中集合的讲解~

    http://blog.csdn.net/zccst/article/details/5092816 comparable& Comparator 都是用来实现集合中的排序的,只是Compar ...

  10. 【转】link_to中delete无效的问题解决

    问题一 1.问题描述:点击[删除]链接之后,跳到了show页面,完全没有弹出框提示 <%= link_to "删除", product_path(product.id), : ...