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 ...
随机推荐
- 使用C#处理基于比特流的数据
使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...
- Microservice Anti-patterns
在最近的一次Microservices Practitioner Summit中,原Netflix工程师介绍了一种越来越常见的对Microservice的误用.简单地说,大家在搭建一个基于Micros ...
- Linux中进行单文件内容的复制
文件内容复制的常规方法: 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长 一次性复制文件的内容,这种方法必须首先获取 ...
- Vue + Webpack + Vue-loader 系列教程(1)功能介绍篇
原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ Vue-loader 是什么? vue-loader 是一个加载器,能把如下格式的 Vue ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
- C# 给word文档添加水印
和PDF一样,在word中,水印也分为图片水印和文本水印,给文档添加图片水印可以使文档变得更为美观,更具有吸引力.文本水印则可以保护文档,提醒别人该文档是受版权保护的,不能随意抄袭.前面我分享了如何给 ...
- WinForm设置控件焦点focus
winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这个文本框里了. ②Winfor ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- IIS8 使用FastCGI配置PHP环境支持 过程详解
平时帮朋友们配置过一些PHP环境的服务器,但是一直使用的都是Apache HTTP+PHP,今天呢,我吧IIS+PHP配置方式给大家发一下下~呵呵. 在这里,我使用的是FastCGI模块映射的方式配置 ...