Java的IO基础学习
来源:互联网 发布:网红晚晚的淘宝店 编辑:程序博客网 时间:2024/05/22 01:27
1、Java.io.File类的使用
IO原理及流的分类:
文件流:(重点)
FileInputStream/FileOutputStream/FileReader/FileWriter
缓冲流:(重点)
BufferedInputStream/BufferedOutputStream/BufferedReader/BufferedWriter
转换流:
InputStreamReader/OutputStreamWriter
标准输入/输出流:
打印流:
PrintStream/PrintWriter
数据流:
DataInputStream/DataOutputStream
对象流 -- 涉及序列化、反序列化 (重点)
ObjectInputStream/ObjectOutputStream
随机存取文件流 (重点) 既能存又能取
RandomAccessFile
2、java.io.File类
1、凡是与输入、输出相关的类、接口等都定义在java.io包下
2、File是一个类,可以有构造器创建对象,此对象对应着一个文件(.txt .avi .doc .ppt .jpg)或文件目录
3、File类的对象是与平台无关的。
4、File中的方法,仅涉及发到如何让创建、删除、重命名等等(主要是涉及文件内容的,File是无能为力的,必须由io流来完成)
5、File类的对象常作为io流的具体类的构造器的形参。
file1.renameTo(file2):file1重命名为file2.要求:file1文件一定存在,file2一定不存在(要保证都是文件或者都是文件目录)
mkDir():创建一个文件目录,只有上层文件目录存在的情况下,才能返回true
mkDirs():创建一个文件目录,若上层文件目录不存在,一并创建
list():返回文件夹下的文件字符串数组
listFiles();返回文件夹下的File数组
3、路径:
① 相对路径:包括盘符在内的完整路径
②相对路径:在当前文件目录下的文件的路径
4、流的分类:
按照数据流向的不同:输入流、输出流
按照处理数据的单位不同:字节流、字符流(处理的文本文件)
按照角色的不同:节点流(直接作用于文件的)、处理流
5、IO的体系:
抽象基类 节点流(文件流) 缓冲流(处理流的一种,可以提升文件的传输效率)
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream(bos.flush())
Reader FileReader BufferedReader(br.line())
Writer FileWriter BufferedWriter(bw.flush())
注:word文件中包含图片等,不是纯粹的文本文件,所以应使用字节流
6、转换流:
转换流提供了在字节流和字符流之间的转换
Java API提供了两个转换流:
InputStreamReader (解码:字节数组--》字符串) 和 OutputStreamWriter (编码:字符串--》字节数组)
字节流中的数据都是字符时,转换成字符流操作更高效
7、打印流(都是输出流):PrintStream PrintWriter
可是使用System.setOut(PrintStream p) 重新设置一下输出的位置
PrintStream p = new PrintStream(new FileOutputStream("hello.text"),true)
8、数据流:
为了方便地操作Java语言的基本数据类型的数据,可以使用数据流
数据流有两个类:(用于读取和写出基本数据类型的数据)
DataInputStream 和 DataOutputStream
分别 “套接” 在InputStream 和 OutputStream 节点流上
DataInputStream中的方法:
boolean readBoolean() byte readByte()
char readChar() float readFloat()
double readDouble() short readShort()
long readLong() int readInt()
String readUTF() void readFully(byte[] b)
DataOutputStream中的方法:
将上述的方法的read改为相应的write即可。
9、对象流:
ObjectInputStream 和 ObjectOutputStream
用于存储和读取对象的处理流。他的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。
序列化(Serialize):用ObjectOutputStream类将一个Java对象写入IO流中
反序列化(Deserialize):用ObjectInputStream类从IO流中恢复该Java对象
ObjectOutputStream 和 ObjectInputStream 不能序列化static和transient修饰的成员变量
如何创建流的对象:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("properties.text")))
ObjectInputStream ois = new ObjectInputStream(new FileInputStreamStream(new File("ss.text")))
10、对象的序列化 :
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或者通过网络将这种二进制流传输到另一个网络节点。当其他程序获取了这种二进制流,就可以恢复成原来的Java对象。
序列化的好处在于可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可以被还原。
序列化是RMI(Remote Method Invoke - 远程方法调用)过程的参数和返回值都必须实现的机制,而RMI是javaEE的基础。因此序列化机制是JavaEE平台的基础。
如果需要让某个对象支持序列化机制,则必须让其他类是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一:
Serializable
Externalizable
凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量:
private static final long serialVersionUID;
serialVersionUID用来表明类的不同版本间的兼容性
如果类没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的源代码作了修改,serialVersionUID可能发生变化。故建议,显示声明
显示定义serialVersionUID的用途:
希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID
不希望类的不同版本对序列化兼容,因此需确保类的不同版本具有不同的serialVersionUID
要实现序列化的类:
1、要求此类是可序列化的,实现序列化接口Serializable
2、要求类的属性同样的要实现serializable接口
3、提供一个版本号
4、static和transient修饰的成员变量不能序列化(这个信息是加载不进去的)
11、RandomAccessFile:
RandomAccessFile类支持“随机访问”的方式,程序可以直接跳到文件的任意地方来读、写文件
支持只访问文件的部分内容
可以向已存的文件后追加内容
RandomAccessFile对象包含一个记录指针,用以标示当前读写处的位置。RandomAccessFile类对象可以自由移动记录指针:
long getFilePointer() : 获取文件记录指针的当前位置
void seek(long pos) : 将文件记录指针定位到pos位置
构造器:
public RandomAccessFile(File file,String mode)
public RandomAccessFile(String name,String mode)
创建RandomAccessFile类实例需要制定一个mode参数,该参数制定RandomAccessFile的访问模式:
r:以只读方式打开
rw:打开以便读取和写入
rwd:打开以便读取和写入:同步文件内容的更新
rws:打开以便读取和写入:同步文件内容和元数据的更新
RandomAccessFile:支持随机访问
1、既可以充当一个输入流,又可以充当输出流
2、支持从文件头读取、写入(实现的是覆盖)
3、支持从任意位置的读取、写入(插入:需要取出,再写入)
- Java的IO基础学习
- java IO基础学习
- java基础学习—IO
- java基础学习-IO流
- Java-IO学习-基础读写
- JAVA基础学习之IO
- java IO基础 学习总结
- java基础—java的Io操作学习(1)
- java基础—java的Io操作学习(2)
- java基础—java的Io操作学习(3)
- Java基础学习之对IO流的理解
- JAVA的IO学习
- JAVA的IO学习
- Java io的学习
- Java IO学习基础之读写文本文件
- Java IO学习基础之读写文本文件
- Java IO学习基础之读写文本文件
- Java IO学习基础之读写文本文件
- x264参数--码率控制
- 解决session过期跳转到登陆页面并跳出iframe框架
- 备忘: ifconfig, route, ip, vconfig, mii-tool
- 数据库表的列查询不到值
- 供应安卓车牌识别
- Java的IO基础学习
- 3孔一红科技厅迎来了又
- Add Two Numbers
- 【OC学习-11】ARC和内存管理里面的alloc、assign、new、retain、copy、mutableCopy、release说明
- 数据库查询语句关键字总结
- 开源License对比分析
- 边际成本
- zoj 2172 Symmetric Order
- jdk 1.6新特性