- 浏览: 17009 次
- 性别:
- 来自: 广州
-
最新评论
所有的流在使用完毕时,都需要调用close方法进行关流,释放资源。
由于流操作都会有异常,如果发生异常就有可能导致close方法不能被调用
所以,IO异常一定要处理,close方法写在finally语句中
1.InputStream : 输入字节流 方法: read()从流(关联的设备)中读一个字节
** int read(buf):从流中读取n个字节放入缓冲区,方法会返回一个读取字节的个数 ips-->buf
读到一个-1,说明读到了流的末尾
------------------------------------------------------------------------------------------
|---FileInputStream: 重载的构造函数 (String fileName) (File file)
2.OutputStream: 输出字节流 :方法 write(int c)将一个字节写入流 (byte)c
write(buf,offset,len)将指定字节数组的一部分写入流。 buf-->ops
-------------------------------------------------------------------------------------------
|---FileOutputStream: 重载的构造函数 (Strng fileName) (String fileName, boolean append)
append:指定数据是否追加到文件的末尾,默认是false,覆盖原有的数据,
设置为true,将数据追加到文件的末尾
3.Reader:输入字符流 int read() 读一个字符 int read(buf) buf是char[]类型
|---FileReader: FileReader = InputStreamReader(FileInputStream) 只做了一件事:解码(父类在做)
4.Writer:输出字符流 write(int c) (char)c \ write(String str)
|---|---FileWriter: FileWriter = OutputStreamWriter(FileOutputStream) 只做了一件事:编码
理解(会用):
1.装饰设计模式: 对原有的类的进行包装,对方法进行增强
BufferedReader:实现缓冲的功能 创建包装流对象的时候,必须组合一个被包装的底层流
增加了一个新方法 String readLine() 读一行
|--LineNumberReader: 增加了行号功能,getLineNumber() 、setLineNumber()
BufferedWriter:实现了缓冲功能 new BufferedWriter(new FileWriter("1.txt");
增加了新方法 newLine() 另起一行
BufferedInputStream:实现缓冲的功能
BufferedOutputStream:实现缓冲的功能
2.InputStreamReader: 转换流 : 包装,实现了编码解码的功能
new InputStreamReader(new FileInputStream("1.txt"));
3.使用包装流包装System.in,读键盘方便,可以读一行
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
IO需要会写的程序: BufferedReader和BufferedWriter包装InputStream和OutputStream,读一行写一行
BufferedReader和BufferedWriter包装Reader和Writer
BufferedInputStream和BufferedOutputStream包装InputStream和OutputStream
用基础流读写,自定义数组作为缓冲区,实现拷贝
-------以下做一个总结:
io流:数据传输的中转站-->IO流-->目的地
IO流一般都是成对出现的,也就是说按照流的分向:输入流-->输出流
IO流按照操作来分: 字节流-->字符流
一.字符流
基类:Reader(读)Writer(写)
|-Reader
|--BufferedReader:对Reader进行了包装,提供了缓冲区(8192),有ReadLine()方法
构造函数:BufferedReader(Reader r);
|--InputStreamReader:转换流:将字节流转换成字符流:new InputStreamReader(System.in);
|--FileReader:读取文件的字符流,FileReader(File file) FileReader(String fileName);
|-Writer
|--BufferedWriter:包装流:常用的方法write(String s)、flush()刷新 newLine()换行
构造函数:BufferedWriter(Writer w);
|--OutputStreamWriter:转换流: new OutputStreamWriter(System.out);
|--FileWriter:写入文件,FileWriter(File file) FileWriter(String fileName)
FileWriter(File file,boolean append),FileWriter(String fileName,boolean append)
当append为true,将写入到文件的末尾处,当为false时,从文件开头开始写.就会覆盖原来的.默认为false
二.字节流:
|-InputStream(输入流)
|--FileInputStream:读取文件的字符流,和FileReader基本是一样
|--FilterInputStream:过滤流,一般不使用,只是针对了InputStream进行了包装
|--BufferedInputStream:包装类:BufferedReader(InputStream in),提供缓存功能
|-OutputStream(输出流)
|--FileOutputStream:写入文件的字符流,和FileWriter基本一样
|--FilterOutputStream
|--BufferedOutputStream:包装类:BufferedWriter(OutputStream out);
三.使用IO流必须要捕获异常,原因在于我们必须要还资源(关闭流)
FileWriter fw = null; try { fw = new FileWriter("src/1.txt"); } catch(IOException e) { e.printStractTrace(); } finally { try{if(fw!=null)fw.close();}catch(IOException){e.printStackTrace();} }
四.File文件类
1.构造方法:
File(File parnt,String child)
根据prent抽象路径名和child路径名字符串创建一个新的file实例.
File(String pathname)
通过将给定的路径名字来创建一个新的file实例.
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例.
2.常用方法:
isFile:判断对象是否是一个标准文件
isDirectory:判断对象是否为一个文件夹
isAbsolute:判断是否为一个绝对路径
exists:判断对象指定的文件是否存在
createNewFile:根据对象的描述创建一个对象
getName:获得文件名
getPath:获得路径名
getParent:获得文件的父级抽象路径
getAbsolutepath:获得文件的绝对路径名
mkdir:创建此抽象路径指定的目录,(只能在存在的文件夹下创建一个目录)
mkdirs:创建此抽象路径指定的目录,包括所有必须但不存在的目录.创建多级目录(c:/a/b/c)
list(FilenameFilter filter):根据指定过滤器遍历文件夹中的所有文件,返回String[]
如果对象为标准文件,则返回null,如果对象是一个空文件夹,则返回空数组。length为0
FilenameFilter是一个接口,只有一个方法accept,我们需要实现接口的accept方法。
实现类是给list方法自动调用的
方法的参数是list方法传给我们的,返回的结果也是给list方法去用。
listFiles:和list基本一样,返回值类型不一样,返回File[]。
常用案例:遍历目录下所有的文件和文件夹 拷贝一个文件夹 .
五:RandomAccessFile 文件流,可以读写
1.RandomAccessFile(File file,String mode)、RandomAccessFile(String fileName,String mode)
mode:常用的: r,只读 rw读写
2.有很多read和write方法.
seek方法,指定从那个位置开始读seek(0) ,从原有的位置覆盖掉
skipBytes(int n):跳过多少个字节
六:PrintStream、PrintWriter打印流
有一个特殊的方法print可以实现打印
write方法是直接将字节和字符写出去
print:首先调用对象的toString方法转成字符串(如果是基本数据类型,会先自动装箱)
再将字符串编码成字节数组,调用write方法写出去
七:SequenceInputStream序列流
可以将多个字节流组合起来
构造方法:SequenceInputStream(Enumeration<? extends InputStream> e)
//Enumeration可以通过Vector来获得,如果用的是ArrayList,如何获得呢?
SequenceInputStream(InputStream in1,InputStream in2)
八:ObjectInputStream、ObjectOutputStream操作对象的字节流
一般成对出现
使用writeObject方法写入的对象,只能由readObject方法读出来
操作的对象必须实现java.io.Serializable序列化接口,该对象才可以被序列化和反序列化。
序列化: Java中规定的一种保存对象的数据格式
九:DataInputStream、DataOutputStream操作基本数据类型,格式化数据
readInt、writeInt等方法。
writeInt写入一个整数,文件大小为4字节。证明就是把基本数据类型对应的字节写出去了,没有丢失精度
十:ByteArrayInputStream、ByteArrayOutputStream对Byte数组进行读写的字节流,针对内存进行读写
源和目的地都是内存,一般用于对内存中的数据进行处理。
十一:PipedInputStream、PipedOutputStream管道流
1、输入管道流
构造方法:PipedInputStream(PipedOutputStream pos)实现拼接
也可以通过connect(PipedOutputStream pos)方法进行拼接
2、输出管道流
构造方法:PipedOutputStream(PipedInputStream pis)实现拼接
也可以通过connect(PipedInputStream pis)方法进行拼接
--Test:序列化与反序列化.. package com.java.kudy_Say; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.io.ObjectInputStream; import java.io.FileInputStream; /* 序列化与反序列化的过程 */ public class Test { public static void main(String[]args) throws FileNotFoundException, IOException,ClassNotFoundException { /* Student s1 = new Student("张三",18); Student s2 = new Student("王五",19); Student s3 = new Student("李四",20); Student s4 = new Student("大毛",21); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("f:/a.txt")); ArrayList<Student> al = new ArrayList<Student>(); al.add(s1); al.add(s2); al.add(s3); al.add(s4); oos.writeObject(al); oos.close();//关闭流 //首先我们把内容放到一个集合里面去 */ ObjectInputStream ois = new ObjectInputStream(new FileInputStream("f:/a.txt")); ArrayList<Student> al = (ArrayList<Student>)ois.readObject(); for(Student s :al) System.out.println(s); ois.close(); } } //必须要实现一个类 class Student implements Serializable { private String name; private int age; Student(){} Student(String name,int age) { this.name = name; this.age = age; } public String toString() { return name+"@"+age; } }
发表评论
-
javase_22(TCP的理解)
2012-09-02 19:43 676TCP传输 Socket(客户端)和ServerSocket( ... -
javase_21(DUp的学习-->*)
2012-08-30 00:45 735Socket网络编程 网络协议 IP地址与端口号 本 ... -
javase_20(Awt初步认识)
2012-08-27 01:00 1056多线程的再度复习.class package com.jav ... -
javase_19(多线程)
2012-08-24 23:32 905进程: 进程是具有一定独立功能的程序关于某个数据集合上的一次 ... -
javase_18(回顾与反射机制学习)
2012-08-20 11:58 481AM上午总结: package com.ja ... -
javase_16(其它流)
2012-08-20 11:52 940IO包中的其他流: 1.打印流 a)PrintWri ... -
javase_16(其它流)
2012-08-20 11:38 0IO包中的其他流: 1.打印流 a)PrintWri ... -
javase_15(File类的应用)
2012-08-19 00:07 921File类:用来将文件或者 ... -
javase_14(字节流)
2012-08-19 00:00 757字节流的抽象基类: InputStream(输入) ... -
javase_13(字符流)
2012-08-19 00:00 644IO(Input OutPut)流 IO流用来处理设备 ... -
javase_12(集合+时间对象)
2012-08-19 00:00 595Map集合 1.Map存储了一系列键值的映射关系2.M ... -
javase_11(集合的理解)
2012-08-19 00:00 902集合类: 为什么使 ... -
javase_10(String类日常操作)
2012-08-18 09:40 853第一: package com.ja ... -
javase_09(面向对象总结)
2012-08-18 09:39 937Java的环境配置 day01 1. 环 ... -
javase_08(基础面试题)
2012-08-18 09:38 796面试题:请说说抽象类和接口的区别 抽象类,使用abstrac ... -
javase_07(继承与设计模式)
2012-08-18 09:36 658/* 子类对象的实 ... -
javase_06(面向对象)
2012-08-18 09:29 724/* 内部类: .在类中定义的类我们称之为内部类, ... -
javase_05(面向对象)
2012-08-16 11:25 0一.构造函数的定义与 ... -
javase_05(面向对象)
2012-08-16 11:22 856一.构造函数的定义与作用 1.函数的名次与类同名2.没有 ... -
javase_04(面向对象)
2012-08-16 11:21 568面向对象:一种编程思想,使用对象来描述生活中的事物:面向对象的 ...
相关推荐
这份"JavaSE总结文档.rar"包含了一份个人在复习JavaSE时编写的笔记,覆盖了多个主题,旨在巩固和深化对Java基础知识的理解。以下是根据压缩包中的文件名和JavaSE的一般知识体系,整理出的一些关键知识点: 1. **...
Java SE专题中的IO流是Java编程中非常重要的一个部分,主要用于数据的输入和输出操作。在Java中,异常处理是程序稳定性和健壮性的重要保障。对于IO流操作,异常处理通常采用`try-catch-finally`结构。当在`try`块中...
在这个“JavaSE项目最终总结”中,我们将深入探讨JavaSE的重要概念、核心特性以及如何将它们应用于实际项目。 首先,JavaSE包括了Java的基础语法、类库和API,这些都是编写Java程序的基石。例如,了解基本数据类型...
### JavaSE 学习笔记知识点总结 #### 一、JavaSE 概述及应用场景 - **C/S 架构**:客户端/服务器架构是 JavaSE 的一个重要应用领域,例如在 QQ、邮件系统(如 Outlook)以及 OA 系统中都有广泛应用。 - **B/S 架构...
这份"javase总结"涵盖了Java语言的基础和核心概念,对于懒人学者来说,它提供了一条清晰的学习路径,无需在海量资料中寻找关键信息。以下是根据标题、描述和文件名提炼出的Java SE相关知识点: 一、Java基础 1. **...
这个"javase30天基础总结"涵盖了从入门到进阶的关键知识点,旨在帮助初学者在30天内建立起坚实的Java基础知识。 1. **基础语法**:Java是一种强类型、面向对象的语言,学习之初会接触变量、数据类型、运算符、流程...
下面将根据提供的文件内容,总结JavaSE中的部分基础知识点,包括类的封装、继承、多态,以及IO流的相关知识。 首先,从文件内容中可以看到,Java的基础类结构和方法定义。例如,在JavaSEDate01部分,展示了如何在...
### JavaSE重点知识点总结 #### 一、Java概述 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它最初被称为Oak,由James Gosling领导的一组工程师开发。随着...
这个压缩包“JavaSE总结及思维导图.zip”包含了作者对于JavaSE学习的个人理解和整理,通过Typera的形式进行表达,以及使用XMind创建的思维导图来帮助记忆和理解。 首先,让我们深入探讨JavaSE中的核心概念: 1. **...
本总结将深入探讨这些关键知识点,并提供面试中可能遇到的问题。 首先,计算机概述部分涉及计算机的基本组成,包括硬件和软件。了解CPU、内存、存储器、输入输出设备等概念,对于理解Java程序的执行至关重要。同时...
本篇文章总结了JavaSE的主要知识点,涵盖面向对象、类和对象、继承、多态、抽象类和接口、异常处理、IO流等方面。 一、面向对象 面向对象是JavaSE的基本特征,是软件开发过程中使用的基于面向过程的一种思维方式,...
java基础中的IO流部分的总结,有详细的知识点描述,思维导图的整体框架
JavaSE 知识点总结涵盖了 JavaSE 的基础知识点,包括面向对象的理解、面向对象的特点、继承、多态、抽象、接口、类加载机制、IO 体系等。 一、面向对象的理解 面向对象是 Java 的基本特征,是软件开发过程使用的...
JavaSE知识点总结 ... JavaSE知识点总结涵盖了Java语言的基础知识和高级应用,包括面向对象、继承、多态、抽象、final、static、多线程、IO体系等。了解这些知识点对于 Java 开发人员来说非常重要。
这份资源包显然是一个关于Java SE基础知识的总结,利用了Xmind思维导图工具来整理和呈现这些知识点。Xmind是一种流行的大脑风暴和思维组织工具,通过树状结构帮助用户清晰地理解和记忆复杂的概念。 在Java SE的基础...
JavaSE是Java开发的基础,包括但不限于类与对象、封装、继承、多态、异常处理、集合框架、IO流、线程、网络编程等内容。这份文档可能包含了这些主题的相关习题、案例分析或者知识点总结。 【压缩包子文件的文件名称...
基本操作 Java基础 面向对象 多线程 String类 集合 IO socket网络编程 反射 泛型 你想要的通通都在这里
本项目针对JavaSE的多个核心知识点进行了综合性的测试,涵盖了线程、集合、内部类、设计模式、枚举、IO流以及自定义注解等多个关键领域。 1. **线程**:在Java中,线程是程序执行的最小单位,通过`Thread`类或者...
IO、面向对象Object类、API、集合体系、IO体系、面向对象、多线程、递归、相互转换、正则表达式
java面向对象 java面向基础 网络编程 反射 io流 多线程 lambda表达式