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 ...
随机推荐
- HTML5简单入门系列(六)
前言 之前几篇已经将HTML5的主要新增元素和特性简单介绍完毕,LZ一直在犹豫还要不要把其他元素也写出来,因为其实没什么东西可以写,就是自己用到时看一下就行.不过为了入门系列的完整,犹豫再三,还是决定 ...
- 看看国外的javascript题目,你能全部做对吗?(分享)
本文转自@Aaron的博客,拿过来分享一下.原文:看看国外的javascript题目,你能全部做对吗? 题目一: (function(){ return typeof arguments; })(); ...
- static的用法解析
PHP中static变量的使用范围要更广一些,我们不仅可以在类,方法或变量前面添加static修饰符,我们甚至还能给函数内部变量添加static关键字.添加了static修饰符的变量即使在该函数执行完 ...
- abiword Namespace List
abiword Namespace List Here is a list of all namespaces with brief descriptions: abicollab 这个命名空间以及 ...
- SMC MCU
Holtek推出e-Banking智能卡读卡器MCU——HT56RU25,继HT56RB27.HT56RB688 USB接口单片机之后,推出全新UART接口单片机.HT56RU25内建ISO7816- ...
- 如果设置Keil从C代码编译出来的hex文件地址从0x8000开始
和MON51的设置一样,这样作:1.把Startup.a51拷贝到工程目录加入工程,修改125行的 CSEG AT 0 为 CSEG AT 0X8000 ...
- GET POST方法长度限制
GET POST方法长度限制 1. Get方法长度限制 Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制.这个限制是特定的浏览器及服务器对它的限制. ...
- XmlDocument,XDocument相互转换
XmlDocument,XDocument相互转换 using System; using System.Xml; using System.Xml.Linq; namespace MyTest { ...
- build.gradle中引入jar
只需在 dependencies{}中添加: compile fileTree(include: ['*.jar'], dir: 'libs')
- zabbix 通过gateway 获取远程主机的JMX信息
DBHost=192.168.32.55 DBName= zabbix DBUser=zabbixuser DBPassword=zabbixpass StartTrappers=20 MaxHous ...