IO流概述及分类

Reader  InputStream  OutputStream  Writer都是Object的直接子类

字节流:

字节输入流 InputStream(抽象类)

|---FileInputStream(子类)

字节输出流 OutputStream(抽象类)

|---FileOutputStream(子类)

字符流:

字符输入流 Reader(抽象类)

|--- FileReader(子类)

字符输出流 Writer(抽象类)

|--- FileWriter(子类)

一.字节输入流FileInputStream

注意:java中所有输入流在构造时文件必须存在,否则抛出异常

构造方法:

FileInputStream is=new FileInputStream(File file);

FileInputStream is=new FileInputStream(String path);

常用读取方法:

read()  返回值为int数值,含义是通过read方法读取的一个字节根据ascll码表转换成int类型数字

read(byte[] byte) :读取文件,到byte数组中,返回值为int类型,表示读取的字节数目

二.字节输出流FileOutputStream

注意:无论是字符输出流还是字节输入流,创建流对象如果没设置附加的话就会清空文件

FileOutputStream os=new FileOutputStream(File file);

FileOutputStream os=new FileOutputStream(String path);

FileOutputStream os=new FileOutputStream(File file,Boolean append);

FileOutputStream os=new FileOutputStream(String path,Boolean append);

常用输出方法:

write(byte[]byte)

write(byte[] byte,int off,int len)

write(int n);

三.字符流概述

1).为什么要有字符流字节流字节来操作文件但各国使用的字符所占的字节数不同有些占一个字节

       有些占2个字节,有些占3个字节,所以如果使用字节流来操作这种纯文本文件,非常不方便。所以Java又制作

       了字符流--可以按字符读、写,不论这个字符占几个字节,字符流都会保证能够完整的读取一个字符。

    2).字符流也是基于字节流

    3).字符流的作用:只能操作纯文本文件

四.字符输出流Writer

1).write(int c):输出一个字符;

2).write(char[] chArray):输出一个字符数组;

3).write(char[] chArray,int off,int len):输出字符数组的一部分;

4).write(String str):输出一个字符串;

5).write(String str,int off,int len):输出字符串的一部分;

使用它的子类:FileWriter

 

1).追加写入使用构造方法,第二个参数为:true

FileWriter(String name,boolean append):

FileWriter(File name,boolean append)

2).输出换行:

out.write("\r\n");

 

五.字符输入流Reader

1).读取的方法(两个)

1).int read():读取一个“字符”;      返回值为这个字符对应的数字

2).int read(char[] chArray):读取一个“字符数组”;   返回值为读取字符的个数

六.IO异常的处理_JDK7前的处理方式

  

public class Demo {
public static void main(String[] args) {
FileWriter out = null;
try {
out = new FileWriter("demo07.txt");
out.write("呵呵");
} catch (IOException e) {
e.printStackTrace();
}finally {
if(out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

七.IO异常的处理_JDK7后的处理方式

注意:使用jdk7之后版本的try可以不用关闭流,jvm会自动关闭

    try后的小括号中可以写多句话,中间用分号隔开

注意:try中内容最好不要有匿名内部类,因为try不会自动关闭

public class Demo {
public static void main(String[] args) {
try (FileWriter out = new FileWriter("demo08.txt")) {
out.write("喜喜");
} catch (IOException e) { }
//当try...catch语句执行完毕,out会自动关闭
}
}

八.属性集_Properties类概述

    1).java.util.Properties():它本质上是一个Map集合。它有两个方法可以结合IO很方便的操作配置文件

    2).什么是配置文件:指软件运行时,需要记录一些用户的、软件的一些配置信息,它是纯文本文件,通用格式:

test.properties

------------------------------------------

金币=100000

钻石=5000

点券=1000

疲劳=120

注意:配置文件中数据的格式:名=值,这种格式正好跟我们的"键值对--Map"的结构匹配。

所以Java单独做了一个Map集合,目的就是可以结合IO流很方便的读写这种配置文件。

九.属性集_Properties类与流相关的方法介绍

Properties继承自Hashtable,包含操作map的几乎所有方法,也有它自己独有的方法,

java.util.Properties是针对于配置文件的一个类,只能操作字符串,无论是key还是value

    1).写:store(FileWriter out,String com)

    2).读:load(FileReader in)

    示例代码:

  

public class Demo {
public static void main(String[] args) {
// writeFile();
readFile();
} private static void readFile() {
Properties pro = new Properties(); try (FileReader in = new FileReader("demo09.txt")) {
pro.load(in);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//遍历
Set<String> keys = pro.stringPropertyNames();//相当于:Map-->keySet()
for (String k : keys) {
System.out.println(k + "," + pro.getProperty(k));//相当于:Map--get(Object key)
}
} public static void writeFile(){
Properties pro = new Properties(); pro.setProperty("金币", "10000");//相当于Map--put(Object key,Object value)
pro.setProperty("钻石", "5000");
pro.setProperty("疲劳", "120");
pro.setProperty("点券", "3000"); //存储到文件
try (FileWriter out = new FileWriter("demo09.txt")) {
pro.store(out, "Hello");
} catch (IOException e) {
e.printStackTrace();
} }
}

java_IO流的更多相关文章

  1. Java_IO流_File类配合使用(其中用到了递归)

    第一:Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.以下对Java File文件操作以及常用方法进行简单介绍 案例1:遍历出指定目录下的文件夹,并输出文件名 stat ...

  2. java_IO流小结

    字符流和字节流的主要区别: 1.字节流读取的时候,读到一个字节就返回一个字节:  字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时.先去查指定的编码表,将 ...

  3. java_IO流之 NIO

    NIO 定义 即新IO,在JDK1.4的java.nio.*包中引入,其目的在于提高速度. 在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生 ...

  4. Java_IO流_抽象类

    一.   概念 流动,从一端流向另一端,源头与目的地 以程序为中心,程序与 数组/文件/网络连接/数据库, 二.   io流分类 流向:输入流与输出流 数据 :字节楼:二进制,所有文件都可以操作,包括 ...

  5. Java_IO流输入输出

    第三章 输入输出 一.I/O Input/Output 二.File 用途:对文件和目录进行常规操作(除文件读写操作外). 方法:exists():判断文件或目录是否存在 isFile():判断是否是 ...

  6. Java_IO流实验

    实验题目链接:Java第09次实验(IO流) 0. 字节流与二进制文件 我的代码 package experiment.io; import java.io.DataInputStream; impo ...

  7. java_IO流(输入流)

    * 字节输入流(InputStream):所有字节输入流的父类 * 所有子类共性方法: * int read():从输入流中读取数据的下一个字节 * int read(byte[] b):从输入流中拂 ...

  8. java_IO流(输出流)

    ** * io流: * 输入流:硬盘输入到内存 字节/字符输入流 * 输出流:内存输出到硬盘 字节/字符输入流 * 字节流:一切数据都是字节存储(二进制) * 字节输出流(OutputStream): ...

  9. java_IO流读取本地文件

    package com.ht.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoun ...

随机推荐

  1. mysql5.7连接不上可能的问题(针对新安装的mysql5.7可能出现的问题)

    "ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)" 今天刚刚安装好的mysql5. ...

  2. 当需要向数据库插入空值时,sql语句的判断

    方法如下: 1.int代表整形. 2.string 代表 字符型. 3.datetime ,日期类型判断如下 if(account.date!=Datetime.MinValue) { Str1.Ap ...

  3. 基于 HTML5 的 WebGL 3D 版俄罗斯方块

    前言 摘要:2D 的俄罗斯方块已经被人玩烂了,突发奇想就做了个 3D 的游戏机,用来玩俄罗斯方块...实现的基本想法是先在 2D 上实现俄罗斯方块小游戏,然后使用 3D 建模功能创建一个 3D 街机模 ...

  4. Synchronized锁在Spring事务管理下,为啥还线程不安全?

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 大年初二,朋友问了我一个技术的问题(朋友实在是好学, ...

  5. 使用Springboot + Gradle快速整合Mybatis-Plus

    使用Springboot + Gradle快速整合Mybatis-Plus 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] MyBatis-Plus(简称 MP)是一个 MyBatis ...

  6. SpringBoot系列——利用系统环境变量与配置文件的分支选择实现“智能部署”

    前言 通过之前的博客:SpringBoot系列——jar包与war包的部署,我们已经知道了如果实现项目的简单部署,但项目部署的时候最烦的是什么?修改成发布环境对应的配置!数据库连接地址.Eureka注 ...

  7. geoserver发布mysql表数据

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.环境部署 Geoserver中并不自带mysql数据发布功能,需要下 ...

  8. Adreno OpenCL坑——bool转int

    在项目代码中为了避免条件分支,需要把bool变成int的形式,然后通过向量运算的形式和单个单个的形式,其结果却是不同,向量的方式为(-1, 0),而单个的转换则为(1, 0) 有如下kernel代码: ...

  9. SQL Server AlwaysOn 集群 关于主Server IP与Listener IP调换的详细测试

    1. 背景 SQL Server 搭建AlwaysOn后,我们就希望程序连接时使用虚拟的侦听IP(Listener IP),而不再是主Server 的IP.如果我们有采用中间件,则可以在配置中,直接用 ...

  10. 携程实时计算平台架构与实践丨DataPipeline

    文 | 潘国庆 携程大数据平台实时计算平台负责人 本文主要从携程大数据平台概况.架构设计及实现.在实现当中踩坑及填坑的过程.实时计算领域详细的应用场景,以及未来规划五个方面阐述携程实时计算平台架构与实 ...