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 ...
随机推荐
- 指令中 controller && controllerAs
1, controller 他会暴露一个API,利用这个API可以在多个指令之间通过依赖注入进行通信. controller($scope, $element, $attrs, $tranclude) ...
- Linux中的ln
在安装了wdcp或在正常使用wdcp后,如有意无意用使用了yum更新系统或安装软件,有时会直接更新安装了yum源里的apache,这时问题就来了打开所有的网站或页面,都是提示Apache欢迎页面 这个 ...
- Android基础学习之context
Context既是环境变量,也是句柄(handler),也是上下文.类似用使用工具的工具,比如写字来说,笔是工具,Context可以看成是手,用来使用笔.context具有唯一性,具有很多种行为(定义 ...
- MySQL--mysqldump的权限说明
mysqldump 所需要的权限说明: 1.对于table 来说mysqldump 最少要有select 权限. 2.对于view 来说mysqldump 要有show view 权限. 3.对于tr ...
- BZOJ NOI十连测 第一测 T2
思路:看到这题,就感觉是一道很熟悉的题目: http://www.cnblogs.com/qzqzgfy/p/5535821.html 只不过这题的K最多可以到N,而且边权不再只是1,考试的时候yy了 ...
- Pascal's Triangle 解答
Question Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows ...
- java 8 中lambda表达式学习
转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...
- HOWTO Use Python in the web — Python v3.0.1 documentation
HOWTO Use Python in the web - Python v3.0.1 documentation mod_python¶ People coming from PHP often f ...
- 企业OA面临的问题,以及解决问题的推荐
现在的企业不管大小都趋于软件话,而办公用的OA软件更是成为了企业中不可获取的一环,一个好的软件能让企业发展的更加顺利,而一个不合适的软件可能让公司哀声怨道反而起了反作用! OA ...
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...