IO流 第一部分 (outputStream/InputStream Writer/Redaer)

IO流对象中输入和输出是相辅相成的,输出什么,就可以输入什么.

IO的命名方式为前半部分能干什么,后半部分是父类的名字. (FileOutputStream 文件输出流)

java->JVM->OS

流对象使用的基本步骤

  1. 创建流的子类对象,绑定数据目的地(文件路径)

  2. 使用write方法写或read方法读

  3. close()方法关闭流对象 , 释放资源

输出流的异常处理

  • try catch finally 因为最后要关闭资源,所以要有finally来执行关闭资源的选项
                 FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
}catch (IOException e) {
System.out.println(e.toString() + "----");
} finally {
//一定要判断fos是否为null,只有不为null时,才可以关闭资源
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
throw new RuntimeException("");
}
}
}

输出流

OutputStream

  • OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。

    • write(int b) 将指定的字节写入输出流,一次写入一个,传递的ASCII码(负数是汉字)

    • write(byte[] b) 将b.length个字节写入输出流

    • write(byte b[],int off,int len) 将b数组中从off开始的len个字节写入输出流

    • close() 关闭流对象,并且释放流对象的资源 , (流对象操作的是操作系统中的资源,释放这里资源)

FileOutputStram

  • 文件输出流,是用于将数据写入 File的输出流。

构造方法

流的构造方法可以创建文件 默认如果存在相同的文件,会覆盖, 可以设置 boolean append来修改位追加内容

  • FileOutputStram(File file) 传递一个File FileOutputStream(File file, boolean append) // 是否追加内容

  • FileOutputStram(String filepath) FileOutputStream(String name, boolean append)

写入文件方式(换行符的方法 /r/n)

					FileOutputStream fos = new FileOutputStream("c:\\a.txt");
//流对象的方法write写数据
//写1个字节
fos.write(97);
//关闭资源
fos.close(); byte[] bytes = {65,66,67,68};
fos.write(bytes); //写字节数组的一部分,开始索引,写几个
fos.write(bytes, 1, 2); //写入字节数组的简便方式
//写字符串
fos.write("hello".getBytes()); //关闭资源
fos.close();

输入流 (InputStream)

InputStream

所有输入流的超类, 一次读取一个字节

  • int read() // 读一个字节,返回读取到的字节 当读取到文件的结尾的时候,将会返回-1

  • read(byte[] b) // 从输入流中读入一定量的字节,并将其存储到缓存区数组byte[] b 中 , 使用数组来提高读取效率,返回的为读取到的字符数量

  • read(byte[] ,int ) // 将输入流中最多 len 个数据字节读入 byte 数组。

数组读取内容的方式

  1. 从文件中读取一个字符到数组中的初始位置,然后继续读,只到数组长度满了或者到了文件结尾

  2. 当第二次读的时候会将读取到的字符依次放入数组中

FileInputStream

  • FileInputStream(File file)

  • FileInputStream(String filename)

循环的方式来读取文件内容

					FileInputStream fis = new FileInputStream("c:\\a.txt");
//创建字节数组
byte[] b = new byte[1024];
int len = 0 ;
while( (len = fis.read(b)) !=-1){ // 将字符读到了byte数组中,如果到了文件结尾会返回-1
System.out.print(new String(b,0,len));
}
fis.close();

文件的移动(赋值/移动/上传)

创建一个输入流,创建一个输出流,从输入流读取字符同时将字符写入到目标文件

						FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("c:\\t.zip");
fos = new FileOutputStream("d:\\t.zip");
//定义字节数组,缓冲
byte[] bytes = new byte[1024*10];
//读取数组,写入数组
int len = 0 ;
while((len = fis.read(bytes))!=-1){
fos.write(bytes, 0, len);
}
}catch(IOException ex){
throw new RuntimeException("文件复制失败");
}finally{
try{ // 需要将两个流关闭的方式全部用try/catch因为如果一下流出现异常,那么另一个流也需要关闭
if(fos!=null)
fos.close();
}catch(IOException ex){
throw new RuntimeException("释放资源失败");
}finally{
try{
if(fis!=null)
fis.close();
}catch(IOException ex){
throw new RuntimeException("释放资源失败");
}
}
}

字符流(主要用来读文本文件)

Writer 字符输出流

字符输出数组的超类

  • write(int c) : 写1个字符

  • write(char[] c) : 写字符数组

  • write(char[] c,int,int) : 字符数组一部分,开始索引,写几个

  • write(String s) : 写入字符串

FileWriter (Writer的子类)

  • FileWriter(String path) FileWriter(File file)

写入字符流以后必须进行flush()刷新 Close()会自动刷新(不提倡)

    					FileWriter fw = new FileWriter("c:\\1.txt");

					//写1个字符
fw.write(100);
fw.flush(); //写1个字符数组
char[] c = {'a','b','c','d','e'};
fw.write(c);
fw.flush(); //写字符数组一部分
fw.write(c, 2, 2);
fw.flush(); //写如字符串
fw.write("hello");
fw.flush(); fw.close();

Reader (字符输入流)

所有字符输入流的超类

  • int read() : 读取单个字符

  • int read(char[] cbuf) : 将字符读入数组

  • abstract int read(char[] cbuf, int off, int len) : 将字符读入数组的某一部分。

FileReader

					FileReader fr = new FileReader("c:\\1.txt");
/*int len = 0 ;
while((len = fr.read())!=-1){
System.out.print((char)len);
}*/
char[] ch = new char[1024];
int len = 0 ;
while((len = fr.read(ch))!=-1){
System.out.print(new String(ch,0,len));
} fr.close();

字符流中flush() 和close() 的区别

  • flush() 刷新该流的缓冲,刷新完以后可以继续写

  • close() 在关闭以前会刷新缓冲,但是刷新完会关闭流,不可以再继续进行操作.

Java IO(IO流)-1的更多相关文章

  1. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  2. Java IO包装流如何关闭?

      问题: (1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗? (2)如果按顺序关闭流,是从内层流到外层流关闭还是从外层到内存关闭? 问题(1)解释: ...

  3. JAVA基础知识之IO——IO流(Stream)的概念

    Java IO 流 Java将不同的设备或载体(键盘.文件.网络.管道等)的输入输出数据统称为"流"(Stream),即JAVA的IO都是基于流的. JAVA传统的所有流类型类都包 ...

  4. java的IO流

    java的IO流继承四大抽象类分别是字节流 inputStream outputStream与字符流 read write.怎么理解记忆很重要. 直接连接读写对象的是结点流,例如对文件读取字节类的名字 ...

  5. Java基础——IO流

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

  6. Java API —— IO流( FileInputStream & FileOutputStream & BufferedInputStream & BufferedOutputStream )

    1.IO流概述 · IO流用来处理设备之间的数据传输        · 上传文件和下载文件        · Java对数据的操作是通过流的方式 · Java用于操作流的对象都在IO包中   2.IO ...

  7. 【Java】IO流简单分辨

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html Java的IO流体系十分庞大,并且体系层次稍复杂,很容易记混或记错.在此,我把平时经常用 ...

  8. Java - 文件(IO流)

    Java - 文件 (IO)   流的分类:     > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter     ...

  9. Java中IO流

    * IO流用来处理设备之间的数据传输 * Java对数据的操作是通过流的方式 * Java用于操作流的类都在IO包中 * 流按流向分为两种:输入流,输出流. * 流按操作类型分为两种: * 字节流 : ...

  10. Java IO 嵌套流、文本的输入输出和存储

    Java IO 嵌套流.文本的输入输出和存储 @author ixenos 1.   组合流过滤器(嵌套流) a)    跨平台文件分割符:常量字符串 java.io.File.seperator 等 ...

随机推荐

  1. 201521123104 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1. clone方法 1.1 Object ...

  2. 201521123039《Java程序设计》 第二周学习总结

    1.本周学习总结 答:上课老师介绍了Java基本的数据类型,需要注意的地方有:**java的整型数都为带符号数**,**byte类型范围(-127,128)太小,所以我们一般不使用byte型,byte ...

  3. python之---进程

    一.进程 1.什么是进程 (1)正在进行的一个过程或者说一个任务,而负责执行的就是CPU 2.进程与程序的区别 (1)程序仅仅是一堆代码而已,而进程指的是程序的运行过程 同一个程序执行两次,也是两个进 ...

  4. 06jQuery-04-DOM操作

    jQuery既然是为了帮助你能从js的繁琐中解脱出来,自然在DOM操作上也有自己的一套. 1.修改Text和HTML 之前我们提到过,如果用JS的话,你要修改Text或者HTML需要用到其innerH ...

  5. 关于APP分享到QQ、微信等

    <script> var shares=null;        var Intent=null,File=null,Uri=null,main=null; function plusRe ...

  6. 关于ng-options

    在实际使用过程中对angular的ng-options指令有点不解,有的时候觉得很容易理解和上手,但其实等到遇到问题时,发现它很是生疏,(key,value)键值对获取,as关键词,track by ...

  7. 理解及操作环境变量(基于Mac操作)

    通过本文,简单的了解下环境变量及其操作,与便于遇到相关问题时能够准确快捷的解决. 什么是环境变量 An environment variable is a dynamic-named value th ...

  8. asp.net core权限模块的快速构建

    大部分系统都会有权限模块,别人家系统的权限怎么生成的我不知道,我只知道这样做是可以并且挺好的. 文章中只对asp.net core的部分代码进行说明 呃 记录~,mvc版本自行前往仓库查阅 代码中的一 ...

  9. sleep,yield,wait,notify,notifyAll

    1.wait,notify,notifyAll是Object的方法.他们必须在同步块中使用,并且当前线程必须已经获取了锁.wait方法,用来释放同步块对象上的锁,并且等待其他的线程唤醒(notify) ...

  10. 模型组合(Model Combining)之Boosting与Gradient Boosting

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...