Java之IO流

IO

java.io.File

它是文件和目录路径名的抽象描述。

API

1getName():获取文件或目录的名称

2getPath():获取文件或目录的路径

3getAbsolutePath():获取文件或目录的绝对路径

4 getCanonicalPath():获取文件或目录的规范路径

5long length():获取文件的长度,单位字节

6long lastModified():最后修改时间,单位毫秒

7String getParent():获取上级或父目录

File getParentFile():获取上级或父目录

8isFile():判断是否是文件,当且仅当是文件并且是存在的,才会true

9isDirectory():判断是否是目录,当且仅当是目录并且存在的,才会true

10exists():是否存在

11isHidden():是否隐藏

12canWrite():是否可写

13canRead():是否可读

14String[] list():获取下一级

       File[] listFiles():获取下一级

File[] listFiles(FileFilter f):获取下一级,但是会过滤掉一下文件和目录

15createNewFile():创建文件

createTempFile(String prefix, String suffix)

16mkdir():创建一级目录,如果父目录不存在,就失败,但是不报异常

mkdirs():创建多级目录

17delete():删除文件或空目录

18renameTo(File f):重命名文件或目录

IO流的四大抽象基类

1、四大超类

1InputStream:字节输入流

2OutputStream:字节输出流

3Reader:字符输入流

4Writer:字符输出流

2、分类

1)按照方向分:输入流和输出流

2)按照处理的方式不同:字节流和字符流

字符流只能处理纯文本的数据

3)按照角色不同:节点流和处理流

处理流是建立在节点流的基础上的,处理流需要包装一个节点流的对象。

处理流也可以包装另外一个处理流。

3API

1InputStream

int read():一次读取一个字节,返回的是本次读取的字节的值,如果流末尾返回-1

int read(byte[] data):一次读取多个字节,读取的数据存储到data字节数组中,最多读取data.length个字节,返回的是实际本次读取的字节的个数,如果流末尾返回-1。从data[0]开始存储。

int read(byte[] data,int offset, int len):一次读取多个字节,读取的数据存储到data字节数组中,最多读取len个字节,返回的是实际本次读取的字节的个数,如果流末尾返回-1。从data[offset]开始存储。

void close():关闭

2OutputStream

void write(int data):一次写一个字节

void write(byte[] data):一次写整个字节数组

void write(byte[] data, int offset, int len):一次字节数组的一部分,从[offset]开始,一共len

void close():关闭

void flush():刷新

3Reader

int read():一次读取一个字符,返回的是本次读取的字符的Unicode值,如果流末尾返回-1

int read(char[] data):一次读取多个字符,读取的数据存储到data字符数组中,最多读取data.length个字符,返回的是实际本次读取的字符的个数,如果流末尾返回-1。从data[0]开始存储。

int read(char[] data,int offset, int len):一次读取多个字符,读取的数据存储到data字符数组中,最多读取len个字符,返回的是实际本次读取的字符的个数,如果流末尾返回-1。从data[offset]开始存储。

void close():关闭

4Writer

void write(int data):一次写一个字符

void write(char[] data):一次写整个字符数组

void write(char[] data, int offset, int len):一次字符数组的一部分,从[offset]开始,一共len

void write(String str):一次写整个字符串

void write(String str, int offset, int count):一次写字符串的一部分,从[offset]开始,一共count

void close():关闭

void flush():刷新

文件IO

1、类型

FileInputStream:文件字节输入流,可以读取任意类型的文件

FileOutputStream:文件字节输出流,可以把字节数据输出到任意类型的文件

FileReader:文件字符输入流,只能读取纯文本的文件。按照平台默认的字符编码进行解码。

FileWriter:文件字符输出流,只能把字符数据输出到纯文本文件。按照平台默认的字符编码进行编码。

2、读写文件的代码

示例代码:

public void copy(File src, File dest)throws IOException{

   FileInputStream fis = new FileInputStream(src);

   FileOutputStream fos = new FileOutputStream(dest);

   byte[] data = new byte[1024];

   while(true){

       int len = fis.read(data);

       if(len==-1){

           break;

      }

       fos.write(data,0,len);

  }

    fis.close();

   fos.close();

}

缓冲IO

1、分为

BufferedInputStream:字节输入缓冲流,给InputStream系列IO流增加缓冲效果 BufferedOutputStream:字节输出缓冲流,给OutputStream系列IO流增加缓冲效果 BufferedReader:字符输入缓冲流,给Reader系列IO流增加缓冲效果

String readLine():按行读取

BufferedWriter:字符输出缓冲流,给Writer系列IO流增加缓冲效果

void newLine():输出换行符

2、默认的缓冲区的大小是8192 = 1024 * 8(字节/字符)

3、可以给读写的过程提高效率

不仅仅是可以给文件IO流增加缓冲效果,可以给任意符合对应类型的IO流增加缓冲效果。

示例代码:

public void copyBuffer(File src, File dest)throws IOException{
   FileInputStream fis = new FileInputStream(src);
   FileOutputStream fos = new FileOutputStream(dest);

  BufferedInputStream bis = new BufferedInputStream(fis);

   BufferedOutputStream bos = new BufferedOutputStream(fos);

   byte[] data = new byte[1024];

   while(true){

       int len = bis.read(data);

       if(len==-1){

           break;

      }

       bos.write(data,0,len);

  }

   bos.close();

   fos.close();

   bis.close();

   fis.close();    

}

编码与解码的IO

1、编码:OutputStreamWriter

       可以把字符流转为字节流输出,并且在转换的过程中,可以指定字符编码。

2、解码:InputStreamReader

       可以把字节输入流转为字符输入流,并且在转换的过程中,可以指定字符编码。

数据IO

1、类型

DataInputStream:允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。 DataOutputStream:允许应用程序以适当方式将基本 Java 数据类型写入输出流中。

它俩必须配对使用

读的顺序要与写的顺序一致

2API

DataOutputStream

DataInputStream

writeInt(xx):输出int类型整数

int readInt()

writeDouble(xx):输出double类型

double readDouble()

writeBoolean(xx)

boolean readBoolean()

writeLong(xx)

long readLong()

writeChar(xx)

char readChar()

writeByte(xx)

byte readByte()

writeShort(xx)

short readShort()

writeFloat(xx)

float readFloat()

writeUTF(String str):输出字符串的

String readUTF()

 对象IO

1、类型

ObjectOutputStream:对象序列化,输出对象,把对象转为字节序列输出

ObjectInputStream:对象反序列化,读取对象,把字节序列重构成Java对象

2API

ObjectOutputStreamwriteObject(对象)

ObjectInputStreamObject readObject()

3、序列化需要注意哪些内容?

1)所有要序列化的对象的类型都必须实现java.io.Serializable接口

如果对象的属性类型也是引用数据类型,那么也要实现java.io.Serializable接口

2)希望类的修改对象反序列化不产生影响,那么我们最后能够增加一个序列化版本ID

private static final long serialVersionUID = 1L;

3)如果有些属性不想要序列化,可以加transient

4)如果某个属性前面有static修饰,也不参与序列化

4、除了Serializable接口之外,还可以实现java.io.Externalizable接口,但是要求重写:

void readExternal(ObjectInput in) void writeExternal(ObjectOutput out)

关于哪些属性序列化和反序列化,由程序员自己定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miki_souls

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值