java学习一目了然——IO

IO是java学习当中很重要的一部分.IO流实现数据的上传下载,即读写数据,包括输入和输出流,输入流指的是将数据以字符或字节形式从外部媒介比如文件、数据库等读取到内存中所以也分为字符输入流和字节输入流。

数据类型:

  • 基本流(低级流)
    字节流 InputStream/OutputStream
字符流 Reader/Writer(接口类型)
  • 高级流(处理流):对基本流进一步操作
字符:
Writer--FileWriter
Reader--FileReader
字节:
Writer--FileOutputStream
Reader--FileInputStream
Writer--FileWriter
FileWriter(String filename);
FileWriter(File file);
write(int c); 写一个单独的字符(在缓冲区中)
write(char cbuf[], int off, int len) 写入字符数组(在缓冲区中)
public void write(String str, int off, int len) 写入字符串(在缓冲区中)
flush(); 刷新缓冲区,将数据真正写入文件,注意这里的写入为修改,而不是追加
close(); 刷新缓冲区,关闭流对象,释放相关资源

构造函数FileWriter(String filename,boolean isAppend)中boolean参数为true时,write()方法为追加

这里的write方法介绍三种种重载

  1. 写入单个字符

    int c = 0; //初始化
    while((c=fr.read())!=-1){
    fw.write(c);
    }
  2. 写入字符数组

    char[] chs = new char[1024];
    int len = chs.length;
    while(fr.read(chs)!=-1){
    fw.write(chs,0,len); //添加字符数组的长度,为了防止写入时缓冲区未写满而产生多余数据
    }
  3. 写入字符串

    char[] chs = new char[1024];
    int len = chs.length;
    while((len = fr.read(chs))!=-1){
    fw.write(new String().valueOf(chs,0,len));
    //fw.write(new String().valueOf(chs), 0 , len);
    }

flush方法为刷新缓冲区,在flush方法使用之后write方法写入的数据才真正有效.而close方法调用的同时,会自动将缓冲区flush一下,然后关闭流.

Reader--FileReader
 FileReader(String filename);
FileReader(File file);
int read() 返回读入单一字符对应的int值,并将read位置移到下一位.如果没有读到,返回-1
int read(char cbuf[]) 返回多字符值
int read(char cbuf[], int off, int len)

注意:read和write(Writer类中)其中一个使用三参数的重载即可

代码见FileWriter
Writer--FileOutputStream
write(char);
write(int);
write(byte[]);//因为是字节流,write没有参数为String的重载
write(byte[],int off,int len);最常用
Reader--FileInputStream
read(byte[]);
高效流:
BufferedWriter(Writer w);
BufferedReader(Reader r);
使用方法同上 BufferedWriter:
write(String);
newLine(); 换行
BufferedReader
String readLine(); 读取一行信息
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt")); String line = null; //初始化
while((line = br.readLine())!= null){
if(line.equals("quit")){
break; //读取到退出信息
}
else{
//写入数据三步:写入-换行-刷新
bw.write(line);
bw.newLine();
bw.flush();
}
}
bw.close();
br.close();
字节流与字符流的转化:
字节流转换字符流:
InputStreamReader(InputStream); 此时InputStringReader对象将InputStream对象转换为字符流
常用于键盘输入(字节流)的保存或输出(字符流)
注意:键盘输入时的System.in为InputStream类型
因此,高效转换过程为BufferedReader br = new
BufferedReader(new InputStreamReader(System.in)); 字符流转换字节流:
与之相似,常用于键盘输出
BufferedWriter(new OutputStreamWriter(System.out));
Properties(Map)
Properties可保存到流中也可从流中加载
Object setProperties(String key,String value); 添加
String getProperties(String key)
Set<StringstringPropertyNames()
Properties实现集合与IO流的拼接
void load(InputStream is);
void load(Reader r); 读到的文件输入流按照格式直接存入Properties的Map集合中 void store(OutputStream os,String comments);
void store(Writer w,String comments);以键值对的形式写入文件
打印流
直接操作文件
PrintWriter(File file);
PrintWriter(String filePath);(不自动刷新缓冲区) PrintWriter(OutputStream os);
PrintWriter(Writer w); println自动刷新缓冲区 print(...);
println(...); println在某些情况下可以自动刷新缓冲区,具体情况如上
当println方法自动刷新时,相当于BufferedWriter中的writer(ln);newLine();flush();三个方法

java学习一目了然——IO的更多相关文章

  1. java学习一目了然——File类文件处理

    java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...

  2. java学习一目了然——异常必知

    java学习一目了然--异常必知 我们只要学java,异常肯定非常熟悉,该抛的时候抛一下就行.但是这其中还有点小细节需要注意.就用这个小短篇来说一下异常处理中的小细节吧. 异常处理 RuntimeEx ...

  3. Java学习之==>IO文件操作体系

    一.概述 在整个 Java.io 中最重要的就是5个类和一个接口.5个类指的是 File.InputStream.OutputStream.Reader.Writer,一个接口指的是Serializa ...

  4. Java学习之IO之File类二

    之前学了File便想把我学习视频的名字改了,因为文件名太长不好看,便试着写了个功能实现 package com.gh.file; import java.io.File; /** * 批量文件命名 * ...

  5. java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  6. java学习笔记--IO流

    第十二章大纲: I/O input/output 输入/输出 一.创建文件,借助File类来实现 file.createNewFile() : 创建文件 file.exists() : 判断文件是否存 ...

  7. java学习之IO装饰设计模式

    装饰设计模式就是对已有的对象的功能进行增强 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类. 装饰类通常会通过构造方法接收被装 ...

  8. java学习之IO文件分割

    package om.gh.homework; import java.io.*; /** * 实现分割文件; * @param file */ public class HomeWork { /** ...

  9. java学习之IO对象流

    //注意对象类要打标记实现Serializable接口 package com.gh; import java.io.FileInputStream; import java.io.FileNotFo ...

随机推荐

  1. Java中的各种o

    java的po vo dao dto pojo 1各个术语的简介 PO(persistant object)持久对象 最形象的理解就是一个PO就是数据库中的一条记录.PO是在ORM中出现的概念,就是O ...

  2. Application.DoEvents()

    今天,在按照书上的一个winform例子做练习(实则就是边看边抄了一遍...)的时候,看到Application.DoEvents()这个方法,但是并不明白这个方法是做什么用的.只知道不用这个方法的话 ...

  3. [Head First Python]4. summary

    1- strip()方法可以从字符串去除不想要的空白符 (role, line_spoken) = each_line.split(":", 1) line_spoken = li ...

  4. Redis 入门之编译安装

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...

  5. python笔记之常用模块用法分析

    python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...

  6. Maven的使用--Eclipse在线安装Maven插件m2e

    我使用的Eclipse版本是3.7(Indigo) 通过Eclipse的help选项,点击“Install New Software...”弹出安装对话框, 点击add按钮,在Location里输入h ...

  7. CSS3之背景色渐变

    在css2时代,页面背景色渐变,按钮背景渐变效果主要是通过图片实现,css3中可通过 gradient 实现背景色渐变,图片作为一种资源,每次在页面加载时都要从服务器下载,这样如果页面很大需要渐变的效 ...

  8. Java iText5.5.1 绘制PDF表格

    iText下载链接:http://sourceforge.net/projects/itext/files/ 会有两个文件夹:extrajars中的extrajars-2.3.jar文件用于解决中文不 ...

  9. Weblogic缓存

    缓存:如果脱离IDE工具的话,weblogic的文件会在\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_user文件夹中 ...

  10. USB Mass Storage学习笔记-STM32+FLASH实现U盘

    一.内容概述  采用STM32内部自带USB控制器外加大页NAND FLASH K9F1G08U0A实现一个128M的U盘. 1.STM32的USB控制器 STM32F103的MCU自带USB从控制器 ...