Java中IO流,输入输出流概述与总结
总结的很粗糙,以后时间富裕了好好修改一下。
1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中。其中,
所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类;
而所有输出流都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类。
【首先需要明白的是:流是干什么的???(为了永久性的保存数据)
根据数据流向的不同分为输入流和输出流;
根据处理数据类型的不同分为字符流和字节流;
】
【然后需要明白的是输入模式和输出模式是谁流向谁:
InputStream(字节输入流)和Reader(字符输入流)通俗的理解都是读(read)的。
OutputStream(字节输出流)和Writer(字符输出流)通俗的理解都是写(writer)的。
】
最后下面搞清楚各种流的类型的该怎么用,谁包含谁,理清思路。
2:InputStream类是字节输入流的抽象类,是所有字节输入流的父类,InputStream类具有层次结构如下图所示;

3:java中的字符是Unicode编码的,是双字节的。InputStream是用来处理字节的,在处理字符文本时很不方便。Java为字符文本的输入提供了专门的一套类Reader。Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类。

4:输出流OutputStream类是字节输入流的抽象类,此抽象类表示输出字节流的所有类的超类。

5:Writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。

6:File类是IO包中唯一代表磁盘文件本身的对象。通过File来创建,删除,重命名文件。File类对象的主要作用就是用来获取文本本身的一些信息。如文本的所在的目录,文件的长度,读写权限等等。(有的需要记忆,比如isFile(),isDirectory(),exits();有的了解即可。使用的时候查看API)
package com.ningmeng;
import java.io.File;
public class Test {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
File file=new File("aa.txt");//文件默认就创建在你创建的项目下面,刷新即可看到
System.out.println(file.exists());//判断文件是否存在
file.createNewFile();//创建文件,不是文件夹
System.out.println(file.exists());//再次判断是否存在
System.out.println(file.getName());//获取文件的名字
System.out.println(file.getAbsolutePath());//获取文件的绝对路径
System.out.println(file.getPath());//获取文件的相对路径
System.out.println(file.getParent());//获取文件的父路径
System.out.println(file.canRead());//文件是否可读
System.out.println(file.canWrite());//文件是否可写
System.out.println(file.length());//文件的长度
System.out.println(file.lastModified());//文件最后一次修改的时间
System.out.println(file.isDirectory());//判断文件是否是一个目录
System.out.println(file.isHidden());//文件是否隐藏
System.out.println(file.isFile());//判断文件是否存在
}
}
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
list()获取某个目录下所有的文件或者文件夹:
package com.ningmeng;
import java.io.File;
public class FileTest {
public static void main(String[] args){
File file=new File("D:/");//指定文件目录
String[] str=file.list();//获取指定目录下的所有文件或者文件夹的名称数组
for(String s : str){//加强for循环遍历输出
System.out.println(s);
}
}
}
package com.ningmeng;
import java.io.File;
public class FileTest {
public static void main(String[] args){
File file=new File("D:/");//指定文件路径
File[] f=file.listFiles();//获取指定目录下的所有文件或者文件夹的File数组
for(File fi : f){//加强for循环遍历输出
System.out.println(fi);
}
}
}
案例演示:
获取某种格式的文件比如获取某种后缀的图片,并输出文件名:
package com.ningmeng;
import java.io.File;
public class FileTest {
public static void main(String[] args){
File file=new File("C:\\Users\\biehongli\\Pictures\\xuniji");
String[] str=file.list();
for(String s : str){
if(s.endsWith(".jpg") || s.endsWith(".png")){//如果后缀是这种格式的就输出
System.out.println(s);
}
}
}
}
下面演示获取文件夹下面子目录里面的文件获取(并没有完全获取子目录的子目录等等,仅仅获取了子一级目录):
package com.ningmeng;
import java.io.File;
public class FileTest {
public static void main(String[] args){
File file=new File("C:\\Users\\biehongli\\Pictures\\Camera Roll");
File[] f=file.listFiles();
for(File fi : f){
if(fi.isDirectory()){//判断如果是一个目录
String[] s=fi.list();
for(String str : s){
if(str.endsWith(".jpg")){
System.out.println(str);
}
}
}
}
}
}
A:文件名称过滤器的概述
package com.ningmeng; import java.io.File;
import java.io.FilenameFilter; public class FileTest { public static void main(String[] args){
File file=new File("C:\\Users\\biehongli\\Pictures\\Camera Roll"); String[] str=file.list(new FilenameFilter() {//过滤器,匿名内部类 @Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
//System.out.println(dir);//获取文件的路径
//System.out.println(name);//获取文件的名字
File f=new File(dir,name);
return f.isFile() && f.getName().endsWith(".jpg");
}
});
for(String s : str){
System.out.println(s);
} }
}
7:下面以一些字节输入输出流具体的案例操作(操作的时候认清自己使用的是字节流还是字符流):
FileInputStream的单个字节读取:
FileOutputStream的单个字节写入:
package com.ningmeng; import java.io.FileInputStream;
import java.io.FileOutputStream; public class FileTest { public static void main(String[] args) throws Exception{
FileInputStream fis=new FileInputStream("aaa.txt");
FileOutputStream fos=new FileOutputStream("bbb.txt",true);
//FileOutputStream()后面加true指文件后面可追加 int a=fis.read();//read()一次读取一个字节
System.out.println(a);//读取的一个字节输出 fos.write(101);//write()一次写一个字节
fis.close();//一定记得关闭流,养成好习惯
fos.close();
}
}
FileInputStream和FileOutputStream进行拷贝文本或者图片或者歌曲:
package com.ningmeng; import java.io.FileInputStream;
import java.io.FileOutputStream; public class FileTest { public static void main(String[] args) throws Exception{
FileInputStream fis=new FileInputStream("aaa.txt");
FileOutputStream fos=new FileOutputStream("bbb.txt");
//如果没有bbb.txt,会创建出一个 int b;
while((b=fis.read())!=-1){
fos.write(b);
}
fis.close();
fos.close();
}
}
FileInputStream和FileOutputStream定义小数组进行读写操作:
package com.ningmeng; import java.io.FileInputStream;
import java.io.FileOutputStream; public class FileTest { public static void main(String[] args) throws Exception{
FileInputStream fis = new FileInputStream("aaa.txt");
FileOutputStream fos = new FileOutputStream("bbb.txt");
int len;
byte[] arr = new byte[1024 * 8];//自定义字节数组 while((len = fis.read(arr)) != -1) {
//fos.write(arr);
fos.write(arr, 0, len);//写出字节数组写出有效个字节个数
}
//IO流(定义小数组)
//write(byte[] b)
//write(byte[] b, int off, int len)写出有效的字节个数 fis.close();
fos.close();
}
}
IO流(BufferedInputStream和BufferOutputStream拷贝)
package com.ningmeng; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream; public class FileTest { public static void main(String[] args) throws Exception{
FileInputStream fis = new FileInputStream("aaa.txt");
FileOutputStream fos = new FileOutputStream("bbb.txt"); BufferedInputStream bis=new BufferedInputStream(fis);
//使用装饰模式,把fis装饰进去bis中。使用缓冲读取速度变快
BufferedOutputStream bos=new BufferedOutputStream(fos); int b;
while((b=bis.read())!=-1){
bos.write(b);
}
bis.close();
bos.close();
}
}
面试题:小数组的读写和带Buffered的读取哪个更快?
package com.ningmeng; import java.io.FileReader;
import java.io.FileWriter; public class FileTest { public static void main(String[] args) throws Exception{
//FileReader类的read()方法可以按照字符大小读取
FileReader fr=new FileReader("aaa.txt");
int b;
while((b=fr.read())!=-1){
System.out.println((char)b);//int类型转为字符型
}
fr.close(); //FileWriter类的write()方法可以自动把字符转为字节写出
FileWriter fw = new FileWriter("aaa.txt",true);
fw.write("aaa");
fw.close(); //字符流的拷贝
FileReader fr2 = new FileReader("aaa.txt");
FileWriter fw2 = new FileWriter("bbb.txt"); int ch;
while((ch = fr2.read()) != -1) {
fw2.write(ch);
} fr2.close();
fw2.close();
}
}
package com.ningmeng; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter; public class FileTest { public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new FileReader("aaa.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("bbb.txt"));
//BufferedReader和BufferedWriter的使用:
int b;
while((b=br.read())!=-1){
bw.write((char)b);
}
br.close();
bw.close();
}
}
先写到这里吧,内容比较多,以后有时间再总结,也方便自己脑补
Java中IO流,输入输出流概述与总结的更多相关文章
- Java中IO流的总结
有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...
- java 中 IO 流分为几种?(未完成)
java 中 IO 流分为几种?(未完成)
- JAVA中IO流总结
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42119261 我想你对JAVA的IO流有所了解,平时使用的 ...
- IO流输入 输出流 字符字节流
一.流 1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. ...
- JAVA中IO流详解
IO流:数据传输是需要通道的,而IO流就是数据传输的通道. IO流可以形象的比喻为运送货物的传输带. IO流的分类: ①根据操作的数据类型的不同可以分为 :字节流与字符流. ②根据数据的流向分为:输入 ...
- Java中IO流
* IO流用来处理设备之间的数据传输 * Java对数据的操作是通过流的方式 * Java用于操作流的类都在IO包中 * 流按流向分为两种:输入流,输出流. * 流按操作类型分为两种: * 字节流 : ...
- java中io流浅析
1.java.io包下File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源.File file1 = new File("d:\\io\\helloworl ...
- Java中IO流中的装饰设计模式(BufferReader的原理)
本文粗略的介绍下JavaIO的整体框架,重在解释BufferReader/BufferWriter的演变过程和原理(对应的设计模式) 一.JavaIO的简介 流按操作数据分为两种:字节流与字符流. 流 ...
- java中IO流小解
下面这张图列出了java中一些处理流: java中根据操作对象的不同可以分为:字节流和字符流. 首先我们先表示一下什么叫节点流和处理流: 节点流:可以从或向一个特定的地方(节点)读写数据.如FileR ...
随机推荐
- 路由的Resolve机制(需要了解promise)
angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js $stateProvider .state ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- AES加密
package com.edu.hpu; import java.math.BigInteger; import java.security.MessageDigest; import java.se ...
- 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)
上一节部署了 cirros-vm1 到 first_local_net,今天我们将再部署 cirros-vm2 到同一网络,并创建 second_local_net. 连接第二个 instance 到 ...
- springmvc的拦截器
什么是拦截器 java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...
- TemplateMethod(模块方法模式)
/** * 模块模式 * @author TMAC-J * 将一个完整的算法分离,分成不同的模块 * 用于有很多步骤的时候,可能以后这些步骤还会增加,把这些步骤分离 * 将有共性的部分放在抽象类中 * ...
- 解决:SharePoint当中的STP网站列表模板没有办法导出到其它语言环境中使用
首在在你的英文版本上,导出列表或是网站的模板,这个文件可能是这样滴:template.stp 把这个文件 template.stp 命名为 template.cab 解压 这个 *.cab 文件 在解 ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- 入园记------我的DBA之路
今天周一拖着疲惫的身躯 11点才离开公司,回到家估计写完这篇博客就要17号了. 一个人走在回家的路上,很黑,突然很多感触,一个人在北京拼搏,不敢停止学习的脚步,因为只要停下来就会感觉到孤独. 回顾一下 ...
- 《图解HTTP》读书笔记
目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书<HTTP权威指南>与<TCP/IP详解,卷1>,但内容晦涩难懂,学习难度较大.其实,HTTP协议并不复杂,理 ...