输入流和输出流相对于内存

将外部设备的数据读取到内存中:输入

将内存中的数据写入外部设备中:输出

IO流经常使用基类

字节流的抽象基类:InputStream,OutputStream

字符的抽象基类:Reader。Writer

PS:由这四个流派生出的子类都是以父类名作为后缀名

如:InputStream的派生类FileInputStream,Reader的派生类FileReader

PS:假设是文字形式的数据应该优先考虑字符流,且将数据从内存写到硬盘上应该是Writer

FileWriter类

演示:将文字储存到硬盘上(FileWriter)

import java.io.FileWriter;
import java.io.IOException; public class Main
{
public static void main(String[] args) throws IOException{
//假设文件不存在。会自己主动创建,存在。会覆盖
FileWriter fw = new FileWriter("Demo.txt");//抛异常 //调用Writer中的write方法,写入数据,但实际上数据写入的是暂时储存缓冲区中
fw.write("你好"); //用flush方法刷新该流的缓冲。 假设该流已保存缓冲区中各种 write() 方法的全部字符,则马上将它们写入预期目标。
fw.flush();//能够用多次
//关闭资源
//关闭流,关闭资源,在关闭前会先调用flush刷新缓冲中的数据到目的地
//API文档:关闭此流,但要先刷新它。 //在关闭该流之后。再调用 write() 或 flush() 将导致抛出 IOException。关闭曾经关闭的流无效。
fw.close();//仅仅能用一次
}
}

PS:FileWriter的构造函数 FileWriter("damo.txt",true);续写数据,不写,默认是false,会覆盖原有数据

细节

import java.io.FileWriter;
import java.io.IOException; public class Main
{
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
public static void main(String[] args) throws IOException{ FileWriter fw = new FileWriter("Demo.txt",true);
//构造函数,中加个true能够实现对文件的续写 fw.write("你好"+LINE_SEPARATOR+"世界");//Windows下换行是\r\n,Linus下是\n
fw.write(LINE_SEPARATOR+"ads");
fw.flush();
fw.close();
}
}

关于流异常的基本处理

在try的外面创建引用。在里面创建对象,关闭时要推断是是否是空指针

import java.io.FileWriter;
import java.io.IOException; public class Main
{
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
public static void main(String[] args){ FileWriter fw = null;
try {
fw = new FileWriter("z:\\Demo.txt",true);//假设传入一个找不到的地址会抛出两个异常
//找不到文件异常、空指针异常。所以finally部分。加一句推断是否是空指针
fw.write("你好"+LINE_SEPARATOR+"世界");
fw.flush(); } catch (Exception e) {
System.out.println(e.toString());
}finally{
//最后再try一次,单独处理
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
throw new RuntimeException("关闭失败");
}
}
}
}
}

FileReader类

读取一个文本文件,并将读取出来的数据打印到控制台

import java.io.FileReader;
import java.io.IOException; public class Main
{
public static void main(String[] args) throws IOException { //一定要确保文件是存在的
FileReader fr = new FileReader("g:\\java\\Main\\Demo.txt");//文件内容是ab //read方法,作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),假设已到达流的末尾,则返回 -1 // int c = fr.read();
// System.out.println((char)c);
// int c1 = fr.read();
// System.out.println((char)c1);
// int c2 = fr.read();
// System.out.println(c2);//-1 int temp;
while((temp = fr.read())!=-1){
System.out.println(temp);
}
fr.close();
}
}

read();读取一个一个字符。相比之下,read()方法还有读取数组的重载形式:效率高

import java.io.FileReader;
import java.io.IOException; public class Main
{
public static void main(String[] args) throws IOException { FileReader fr = new FileReader("g:\\java\\Main\\Demo.txt");//文件内容是abcdef
//使用read(char[] a)读取文本文件数据
/*
* 先创建字符数组。
*/
// char ch[] = new char[5];
// int num = fr.read(ch);//将读取到的字符存储到数组中,num是字符的个数
// System.out.println(num+":"+new String(ch));//5:abcde
//
// int num1 = fr.read(ch);//将读取到的字符存储到数组中
// System.out.println(num1+":"+new String(ch));//1:fbcde
// //这里相当于。f把原来数组里的a替换了。而txt里无数据了,所以剩余的数组元素还在
//
// int num2 = fr.read(ch);//再读也没有数据了。所以返回-1,char数组无覆盖
// System.out.println(num2+":"+new String(ch));//-1:fbcde //正规写法
int num = 0; char[] ch = new char[5];//数组的长度最好是1024*n while((num = fr.read(ch))!=-1){
System.out.println(new String(ch,0,num));
} fr.close();
}
}



JAVA学习第四十七课 — IO流(一):文件的读写的更多相关文章

  1. JAVA学习第五十七课 — IO流(十一)

    一.管道流 PipedInputStream 和 PipedOutPutStream 输入和输出能够直接进行连接.结合线程使用 管道流,顾名思义,写一个读一个.连成一个管子 API文档:管道输入流应该 ...

  2. JAVA学习第五十一课 — IO流(五)流的操作基本规律

    转换流: InputStreamReader:字节到字符的桥梁.解码 OutputStreamWriter:字符到字节的桥梁.编码 流的基本规律 1.明白源和汇 源:InputStream.Reade ...

  3. JavaSE学习总结(十七)—— IO流

    一.IO流概要 1.1.概念 开发中经常要进行输入输出操作,掌握Java中的IO流显得非常必要. 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流, ...

  4. java学习第21天(IO流的使用)

    IO流分类: A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 注意: a:如果我们没有明确说明按照什么分,默认按照数据类型分 ...

  5. Java学习之路(十一):IO流<前戏>

    File类的概述和构造方法 构造方法: File(String pathname):根据一个路径得到File对象 File(String parent,String child):根据一个目录和一个子 ...

  6. java学习第20天(IO流)

    构造方法File file = new File("e:\\demo"); 创建文件夹 File file = new File("e:\\demo"); fi ...

  7. Java:IO流与文件基础

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

  8. Java基础教程:IO流与文件基础

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

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

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

随机推荐

  1. js中的prototye

    前言 没事的时候写着js完,一般可能大家都知道这个属性吧,但是我还要说说,给一些不知道的人看看吧, 希望对你有帮助. 过程 以前在学c#的时候,老师最多用的就是Person这个类来开讲,我觉得是这个更 ...

  2. ajax 异步上传视频带进度条并提取缩略图

    最近在做一个集富媒体功能于一身的项目.需要上传视频.这里我希望做成异步上传,并且有进度条,响应有状态码,视频连接,缩略图. 服务端响应 { "thumbnail": "/ ...

  3. HIVE:用外连接替代子查询

    由于hive也支持sql,很多人会把hql跟标准sql进行比较,甚至有的时候会直接套用.hive不支持事务也不支持索引,更不支持追加写,但是对于一般的sql都是能够支持的.但是对于一些子查询确实无法支 ...

  4. 2016030203 - 首次将内容推送到github中

    参考网址:http://www.cnblogs.com/plinx/archive/2013/04/08/3009159.html 和当你在你的github上创建repository后的提示信息如下 ...

  5. VS 调试相关

    最近用VS2013 调试遇到的一点小问题,老年痴呆做一下记录. 1. IIS 用 w3wp.exe 调试: IIS 中的文件系统与工程的保持一致,否则断点不会命中: 发布文件系统后,重启站点对应的应用 ...

  6. uva 11136 - Hoax or what

    用两个优先队列来实现,因为队列只能从一头出去: 所以维护一个数组,来标记这个队列的已经出列而另外一个队列没有出列的元素: 到时候再把他们删了就行: #include<cstdio> #in ...

  7. Water Tree

    Codeforces Round #200 (Div. 1) D:http://codeforces.com/problemset/problem/343/D 题意:给你一颗有根树,树的每个节点有一个 ...

  8. asp.net 类库中获取session c#类中获取session

    asp.net  类库中获取session c#类中获取session 1. 先引入命名空间 using System.Web; using System.Web.SessionState; 在使用H ...

  9. struts1 工作原理

    struts1的原理和工作流程 struts1的工作原理或者说工作流程: 1.在web应用程序启动就会加载ActionServlet,ActionServlet从配置文件struts-config.x ...

  10. java学习面向对象之final关键字

    之前我们讲过继承的相关知识了,继承就是子类继承父类的属性和方法并且还可以覆盖父类的方法.但是这样有一个缺陷是什么呢,就是当我们一个类当中涉及一些封装的核心的东西或者对整个系统非常关键的方法或者类的时候 ...