一、流的分类:
* 1.操作数据单位:字节流、字符流
* 2.数据的流向:输入流、输出流
* 3.流的角色:节点流、处理流
*
二、流的体系结构
* 抽象基类               节点流(或文件流)                                            缓冲流(处理流的一种)
* InputStream          FileInputStream (read(byte[] buffer))                   BufferedInputStream (read(byte[] buffer))
* OutputStream      FileOutputStream (write(byte[] buffer,0,len)          BufferedOutputStream (write(byte[] buffer,0,len) / flush()
* Reader                 FileReader (read(char[] cbuf))                              BufferedReader (read(char[] cbuf) / readLine())
* Writer                    FileWriter (write(char[] cbuf,0,len)                        BufferedWriter (write(char[] cbuf,0,len) / flush()

三.案例

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
import org.junit.Test; import java.awt.geom.CubicCurve2D;
import java.io.*;
import java.nio.file.FileAlreadyExistsException;
import java.security.PublicKey; public class Filetest { @Test // 读文件
public void test1() {
FileReader fr = null;
try{
//1. 实例化File类的对象,指明要操作的文件
File file = new File("test");
//2. 提供具体的流
fr = new FileReader(file);
//3.数据的读入
// read() 返回读入的一个字符,如果达到文件的尾部,返回-1
int data = fr.read();
while (data !=-1){
System.out.print((char)data);
data = fr.read();
}
}catch (IOException e){
e.printStackTrace();
}finally {
//4. 关闭文件
if (fr !=null){
try {
fr.close();
}catch (IOException e) {
e.printStackTrace();
}
}
} }
// 对read() 操作升级,使用read的重载方法
@Test // 读文件
public void test2(){
FileReader fr = null;
try {
//1. 实例化File 类的对象,指明要操作的文件
File file = new File("test2");
//2. 提供具体的文件流
fr = new FileReader(file);
//3. 读入操作
// read(char [] cbuf) : 返回每次读入cbuf 数组中的字符的个数,如果达到文件末尾 返回-1
char[] cbuf = new char[5];
int len;
while((len=fr.read(cbuf)) !=-1){
String str = new String(cbuf,0,len);
System.out.print(str);
}
}catch (IOException e){
e.printStackTrace();
}finally {
// 关闭资源
if(fr !=null){
try{
fr.close();
}catch (IOException e){
e.printStackTrace();
}
} } }
@Test //读写文件
public void test3(){
FileReader fr = null;
FileWriter fw= null;
// 读写文件
//创建文件类对象
try {
File srcFile = new File("test");
File destFile = new File("test3");
//
fr = new FileReader(srcFile);
fw = new FileWriter(destFile);
// 读取原文件写入到另一个文件
char [] cbuf = new char [10];
int len;
while ((len = fr.read(cbuf)) !=-1){
fw.write(cbuf,0,len);
}
}catch (IOException e){
e.printStackTrace();
}finally {
// 关闭文件
if (fr !=null){
try {
fr.close();
}catch (IOException e){
e.printStackTrace();
}
}
if (fw !=null){
try {
fw.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
@Test//字节流方式读取文件
public void test4(){
FileInputStream fis = null;
try {
// 1. 造文件
File file = new File("1.png");
//2. 造流
fis = new FileInputStream(file);
//3.
byte[] bt = new byte[5];
int len;
while ((len=fis.read(bt)) !=-1){
//
String str = new String(bt,0,len);
System.out.println(str);
}
}catch (IOException e){
e.printStackTrace();
}finally {
// 关闭
if(fis !=null){
try {
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
@Test // 复制图片
public void test5(){
//
FileInputStream fis =null;
FileOutputStream fos =null;
try{
// 造文件
File srcFile = new File("1.png");
File descFile = new File("2.png");
//造流
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(descFile);
//
byte [] bt = new byte[1024];
int len;
while ((len=fis.read(bt))!=-1){
fos.write(bt,0,len);
}
}catch (IOException e){
e.printStackTrace();
}finally {
// 关闭操作
if (fis !=null){
try{
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
if (fos !=null){
try{
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
} }
public void copyFile(String srcPath,String descPath){ FileInputStream fis =null;
FileOutputStream fos =null;
try{
// 造文件
File srcFile = new File(srcPath);
File descFile = new File(descPath);
//造流
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(descFile);
//
byte [] bt = new byte[1024];
int len;
while ((len=fis.read(bt))!=-1){
fos.write(bt,0,len);
}
}catch (IOException e){
e.printStackTrace();
}finally {
// 关闭操作
if (fis !=null){
try{
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
if (fos !=null){
try{
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
} }
}

6. java IO 流的更多相关文章

  1. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  2. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  3. Java IO流学习总结

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

  4. 揭开Java IO流中的flush()的神秘面纱

    大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...

  5. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

  6. Java IO流题库

    一.    填空题 Java IO流可以分为   节点流   和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...

  7. Java IO流总结

    Java IO流分类以及主要使用方式如下: IO流 |--字节流 |--字节输入流 InputStream: int read();//一次读取一个字节 int read(byte[] bys);// ...

  8. java io流 运行错误时,保存异常到文件里面

    java io流 运行错误时,保存异常到文件里面 下面这个实例,运行后,输入数字,为正确,如果输入字符串,则报错,保存错误信息 //运行错误时,保存异常到文件里面 //下面这个实例,运行后,输入数字, ...

  9. java io流 创建文件、写入数据、设置输出位置

    java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...

  10. java io流 数据流传输

    java io流 数据流传输 把这段当公式用就可以了 //数据流传输 import java.io.*; public class Index{ public static void main(Str ...

随机推荐

  1. Python 英语单词本

    python pymysql re requests socket库的简单运用 要考试了,这里用所学的知识做一个实例 pymysql库 这个库是用来连接数据库的,使用数据库语句在python里创建表和 ...

  2. What Makes for Good Views for Contrastive Learning

    目录 概 前 InfoMin Sweet Spot 空间距离 Color Spaces Frequency Separation 构建 novel views 无监督 半监督 Tian Y., Sun ...

  3. 从源码看全局异常处理器@ExceptionHandler&@ExceptionHandler的生效原理

    1.开头在前 日常开发中,几乎我们的项目都会用到异常处理器,我们通常会定制属于自己的异常处理器,来处理项目中大大小小.各种各样的异常.配置异常处理器目前最常用的方式应该是使用@ControllerAd ...

  4. 计算机图形学——梁友栋-Barsky算法

    梁算法是计算机图形学上最经典的几个算法,也是目前唯一一个以中国人命名的出现在国内外计算机图形学课本的算法,我之前在介绍裁剪算法的时候介绍过这个算法 https://www.cnblogs.com/wk ...

  5. [opencv]KAZE、AKAZE特征检测、匹配与对象查找

    AkAZE是KAZE的加速版 与SIFT,SUFR比较: 1.更加稳定 2.非线性尺度空间 3.AKAZE速度更加快 4.比较新的算法,只有Opencv新的版本才可以用 AKAZE局部匹配介绍 1.A ...

  6. git中submodule子模块的添加、使用和删除

    git中submodule子模块的添加.使用和删除   原文链接:https://blog.csdn.net/guotianqing/article/details/82391665背景项目中经常使用 ...

  7. Storm集群使用DRPC功能Version1.0.1

    在Storm集群上开启DRPC功能, 基于Storm的1.0.1版本, 并且执行简单的例子测试. 1.DRPC概念 DRPC就是分布式远程过程调用. Storm里面引入DRPC主要是利用storm的实 ...

  8. C# 使用阿里云发送短信

    最近有个项目,短信服务使用的是阿里云的,由于时间问题,没有手动去构造sign去发送,而是直接使用阿里云的SDK发送,所以这里算是做个笔记,或许以后还能用得到 首先,我们需要安装阿里云的SDK,推荐使用 ...

  9. Jenkins_构建任务提示文件权限不足的处理方法

    问题现象 构建任务失败,查看日志提示读取文件权限不足. 问题分析 在linux上查看对应文件,发现这些文件只有root用户才有读的权限,jenkins默认是以jenkins用户在操作linux系统,因 ...

  10. git 忽略本地文件的修改

    项目开发过程中,会遇到本地配置文件每个开发人员不同的情况,但如果遇到类似数据库配置这种最终需要加入 git 版本控制的配置,则会陷入两难境地.要么不跟踪,要么有人提交后其他人同步下来必须手动修改,非常 ...