Java IO 简记
1.File 类:
l java.io.File类:文件和目录路径名的抽象表示形式,与平台无关
l File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
l File对象可以作为参数传递给流的构造函数
l File类的常见构造方法:
- public File(String pathname)
以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
- public File(String parent,String child)
以parent为父路径,child为子路径创建File对象。
File的静态属性String separator存储了当前系统的路径分隔符。在UNIX中,此字段为‘/’,在Windows中,为‘\\’
2.流的分类:
l 按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
l 按数据流的流向不同分为:输入流,输出流
l 按流的角色的不同分为:节点流,处理流
Java的IO流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的
>节点流可以从一个特定的数据源读写数据(P2P)
(输入) FileInputStream、FileReader
(输出) FileOutputStream、FileWriter
----------
>处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能(缓冲流)
(输入流):BufferedInputStream、BufferedReader
(输出流):BufferedOutputStream、BufferedWriter
l 为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组
l 根据数据操作单位可以把缓冲流分为:
- BufferedInputStream 和 BufferedOutputStream
- BufferedReader 和 BufferedWriter
l 缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
l 对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
-----------
>对象流
l ObjectInputStream和OjbectOutputSteam
- 用于存储和读取对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。
l 序列化(Serialize):用ObjectOutputStream类将一个Java对象写入IO流中
l 反序列化(Deserialize):用ObjectInputStream类从IO流中恢复该Java对象
- ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。
当其它程序获取了这种二进制流,就可以恢复成原来的Java对象序列化的好处在于可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可被还原。
注意:如果某个类的字段不是基本数据类型或 String 类型,而是另一个引用类型,那么这个引用类型必须是可序列化的,否则拥有该类型的 Field 的类也不能序列化
-------------------
程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源
public class TestIO { public static void main(String[] args) {
// TODO Auto-generated method stub
File newFile = new File("D:/io.txt");
InputStream inStream = null;
OutputStream outStream = null;
try {
if (newFile.createNewFile()) {
System.out.println("文件创建成功");
} else {
System.out.println("文件创建已存在");
} inStream = new FileInputStream(newFile);
int read = -1;
while ((read = inStream.read()) != -1) {
System.out.print((char) read);
} outStream = new FileOutputStream(newFile, true);
outStream.write("Tttttt".getBytes());
outStream.flush(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
inStream.close();
outStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} @Test
public void testCharStream() {
File newFile = new File("D:/io.txt");
FileReader readerStream = null;
FileWriter writerStream = null;
try {
if (newFile.createNewFile()) {
System.out.println("文件创建成功");
} else {
System.out.println("文件创建已存在");
} readerStream = new FileReader(newFile);
int read = -1;
while ((read = readerStream.read()) != -1) {
System.out.print((char) read);
} writerStream = new FileWriter(newFile, true);
writerStream.write("Tttttt");
writerStream.flush(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
readerStream.close();
writerStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} @Test
public void testBufferStream() {
File newFile = new File("D:/io.txt");
FileReader readerStream = null;
FileWriter writerStream = null; try {
if (newFile.createNewFile()) {
System.out.println("文件创建成功");
} else {
System.out.println("文件创建已存在");
} readerStream = new FileReader(newFile);
int read = -1;
while ((read = readerStream.read()) != -1) {
System.out.print((char) read);
} writerStream = new FileWriter(newFile, true);
writerStream.write("Tttttt");
writerStream.flush();
System.out.println("写入完成,重新读取。。。"); BufferedReader bReader = new BufferedReader(readerStream);
System.out.println(bReader.readLine() + "--");
bReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
readerStream.close();
writerStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} @Test
public void testObjectStream() throws FileNotFoundException, IOException, ClassNotFoundException {
File file = new File("person.txt"); // 序列化持久化对象
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
Person person = new Person("Peter", 27);
out.writeObject(person);
out.close(); // 反序列化,并得到对象
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
Object newPerson = in.readObject(); // 没有强制转换到Person类型
in.close();
System.out.println(newPerson);
} static class Person implements Serializable {
private String name = null; private Integer age = null; public Person() {
System.out.println("无参构造");
} public Person(String name, Integer age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} // getter setter方法省略...
@Override
public String toString() {
return "[" + name + ", " + age + "]";
}
} }
3.RandomAccessFile 类
RandomAccessFile 类支持 “随机访问” 的方式,程序可以直接跳到文件的任意地方来读、写文件
RandomAccessFile 对象包含一个记录指针,用以标示当前读写处的位置。RandomAccessFile 类对象可以自由移动记录指针:
- long getFilePointer():获取文件记录指针的当前位置
- void seek(long pos):将文件记录指针定位到 pos 位置
构造器
创建 RandomAccessFile 类实例需要指定一个 mode 参数,该参数指定 RandomAccessFile 的访问模式:
- r: 以只读方式打开
- rw:打开以便读取和写入
- rwd:打开以便读取和写入;同步文件内容的更新
- rws:打开以便读取和写入;同步文件内容和元数据的更新
RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");
raf.seek(5); //先读出来
String temp = raf.readLine(); raf.seek(5);
raf.write("xyz".getBytes());
raf.write(temp.getBytes()); raf.close();
Java IO 简记的更多相关文章
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- Java IO之字符流和文件
前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
- java Io流向指定文件输入内容
package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String ...
- java Io文件输入输出流 复制文件
package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...
- java Io流更新文件内容
package com.hp.io; import java.io.FileOutputStream; import java.io.IOException; public class FileOut ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- java.io.NotSerializableException: test.io.file.Student
java.io.NotSerializableException: test.io.file.Student at java.io.ObjectOutputStream.writeObject0 ...
- java.io.IOException: mark/reset not supported
java.io.IOException: mark/reset not supported at java.io.InputStream.reset(InputStream.java:348) at ...
随机推荐
- UVA 699 The Falling Leaves (二叉树水题)
本文纯属原创.转载请注明出处,谢谢. http://blog.csdn.net/zip_fan. Description Each year, fall in the North Central re ...
- jsp安全性问题
jsp项目不同jsp之间假设只通过超链接进行跳转,安全性太低,不能满足现实生活中对安全性的要求! 为了提高安全性.能够通过Servlet进行跳转,进行跳转的时候为了进一步实现其安全性,能够通过间jsp ...
- SQL SERVER 2008递归
tab1 表结构: create tab1 ( id int primary key identity(1,1), parentid int not null, name varchar(25) ) ...
- Netty聊天室(2):从0开始实战100w级流量应用
目录 客户端 Client 登录和响应处理 写在前面 客户端的会话管理 客户端的逻辑构成 连接服务器与Session 的创建 Session和 channel 相互绑定 AttributeMap接口的 ...
- JVM虚拟机参数
追踪参数: 打印GC简要信息 -XX:+PrintGC 打印GC详细信息 -XX:+PrintGCDetails 打印CG发生的时间戳 -XX:+PrintGCTimeStamps 指定GC log的 ...
- Android Interactive Animation
Ref:收集android上开源的酷炫的交互动画和视觉效果:Interactive-animation Ref:界面特效 Ref:BaseAnimation是基于开源的APP,致力于收集各种动画效果( ...
- tool class
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- QT发布的EXE打包压缩成单文件
Enigma virtual box 是免费的软件虚拟化工具,它可以将多个文件封装到您的应用程序主文件,这样您的软件就可以制作成为单文件的绿色软件. enigma virtual box 支持所有类型 ...
- php生成随机密码的自定义函数
php生成随机密码的自定义函数 生成一个随机密码的函数,生成的密码为小写字母与数字的随机字符串,长度可自定义. 复制代码代码如下: <?php /* * php自动生成新密码自定义函数(带实例 ...
- 3.19课·········HTML---标签与表格
HTML(Hyper Text Markup Language,超文本标记语言) <html> ------开始标签 <head>----网页上的控制信息 <title& ...