java学习一目了然——IO
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方法介绍三种种重载
写入单个字符
int c = 0; //初始化
while((c=fr.read())!=-1){
fw.write(c);
}
写入字符数组
char[] chs = new char[1024];
int len = chs.length;
while(fr.read(chs)!=-1){
fw.write(chs,0,len); //添加字符数组的长度,为了防止写入时缓冲区未写满而产生多余数据
}
写入字符串
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的更多相关文章
- java学习一目了然——File类文件处理
java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...
- java学习一目了然——异常必知
java学习一目了然--异常必知 我们只要学java,异常肯定非常熟悉,该抛的时候抛一下就行.但是这其中还有点小细节需要注意.就用这个小短篇来说一下异常处理中的小细节吧. 异常处理 RuntimeEx ...
- Java学习之==>IO文件操作体系
一.概述 在整个 Java.io 中最重要的就是5个类和一个接口.5个类指的是 File.InputStream.OutputStream.Reader.Writer,一个接口指的是Serializa ...
- Java学习之IO之File类二
之前学了File便想把我学习视频的名字改了,因为文件名太长不好看,便试着写了个功能实现 package com.gh.file; import java.io.File; /** * 批量文件命名 * ...
- java学习之IO流(学习之旅,一)
个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...
- java学习笔记--IO流
第十二章大纲: I/O input/output 输入/输出 一.创建文件,借助File类来实现 file.createNewFile() : 创建文件 file.exists() : 判断文件是否存 ...
- java学习之IO装饰设计模式
装饰设计模式就是对已有的对象的功能进行增强 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类. 装饰类通常会通过构造方法接收被装 ...
- java学习之IO文件分割
package om.gh.homework; import java.io.*; /** * 实现分割文件; * @param file */ public class HomeWork { /** ...
- java学习之IO对象流
//注意对象类要打标记实现Serializable接口 package com.gh; import java.io.FileInputStream; import java.io.FileNotFo ...
随机推荐
- 高可用集群(HA)之Keeplived原理+配置过程
原理--> 通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移. 通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现 ...
- centos minimal 安装无法自定义分区
安装了太多版本的linux,最后还是决定安装CentOS的minimal版本: 安装的时候发现,没办法自定义分区,经查确实在命令行界面下安装是没有自定义分区的. 但是不管怎么安装都是没有图形介面,最后 ...
- c#一个分页控件的例子
一.首先下载一个dll,地址:http://pan.baidu.com/share/link?shareid=1628211605&uk=1342867987 二.添加到项目中 三.添加引用 ...
- 开心菜鸟系列学习笔记------javascript(4)
一.全局上下文中的变量对象: 1)全局对象(Global object) 是在进入任何执行上下文之前就已经创建了的对象:这个对象只存在一份,它的属性在程序中任何地方都可以访问,全局对象的 ...
- underscoreJS的Collections 的API
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- KEIL CRACK及 0xFD Bug修正方法
0xFD Bug是keil编译器中始终存在,而又从未得到官方修复的一个BUG!!! BUG描述:当C源代码中使用了汉字等非ASCII字符,而此字符的编码又恰好包含了大于或等于0xFD的字节时,这个字节 ...
- 一 VC2008环境中ICE的配置
VC2008环境中ICE的配置 ICE 3.4.0的下载页面 http://www.zeroc.com/download_3_4_0.html 环境变量配置 1.Ice-3.4.0安装到c:\Ice ...
- Javascript中正则表达式的全局匹配模式
先看一道JavaScript题目,据说是国内某知名互联网企业的JavaScript笔试题,如果对正则的全局匹配模式不了解的话可能会对下面的输出结果感到疑惑. var str = "123#a ...
- ubuntu下ffmpeg的安装,实现支持3gpp等转换
最近上线的项目,语音格式转码需要调试3gpp,所以需要再spx,3gpp,3gp等格式之间转换,特记录基于ubuntu环境下的环境ffmpeg部署细则 安装测试环境:ubuntu 14.04 64bi ...
- ECSHOP首页站内快讯在哪里添加和修改?
“添加新闻后在首页站内快讯处显示不出来?”.“请问首页中站内快讯(最新文章)在后台哪个位置管理”.“如何让发布的文章进入首页站内快讯”等等诸如此类的问题,经常在论坛里看到一些朋友在询问. 本ECSHO ...