Java学习笔记之IO流

it2023-08-23  66

I/O流

前言一、字节流1.1 字节流输入InputStream1.1.1常用方法1.1.2常用类 1.2字节流输出OutputStream1.2.1常用类1.2.2常用方法 二.字符流2.1字符输入流抽象类Reader2.1.1常用方法2.1.2常用类 2.2 字符流输出Writer2.2.1常用方法2.2.2常用类 三、File类3.1常用方法 四、ZIP压缩输入流/输出流1.压缩ZipOutputStream1.压缩方法 2.解压缩ZipInputStream2.1常用方法 总结


前言

学习I/O流首先需要了解字节流和字符流关系,所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)其子类;所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)其子类


一、字节流

1.1 字节流输入InputStream

InputStream类是字节输入流抽象类,其为所有字节输入流父类,如果遇到错误一般会报错I/OException

1.1.1常用方法

intavailable() 返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。voidclose() 关闭此输入流并释放与流相关联的任何系统资源。voidmark(int readlimit) 标记此输入流中的当前位置。booleanmarkSupported() 测试这个输入流是否支持 mark和 reset方法。abstract intread() 从输入流读取数据的下一个字节。intread(byte[] b) 从输入流读取一些字节数,并将它们存储到缓冲区 b 。intread(byte[] b, int off, int len) 从输入流读取最多 len字节的数据到一个字节数组。voidreset() 将此流重新定位到上次在此输入流上调用 mark方法时的位置。longskip(long n) 跳过并丢弃来自此输入流的 n字节数据。

1.1.2常用类

1.2字节流输出OutputStream

OutputStream类是字节流输出抽象类是所有输出字节流父类

1.2.1常用类

1.2.2常用方法

类<? extends Attribute>getCategory() 获取要用作此打印属性值的“类别”的打印属性类。protected EnumSyntax[]getEnumValueTable() 返回类OrientationRequested的枚举值表。StringgetName() 获取此属性值是一个实例的类别的名称。protected intgetOffset() 返回类OrientationRequested使用的最小整数值。protected String[]getStringTable() 返回类OrientationRequested的字符串表。

二.字符流

2.1字符输入流抽象类Reader

2.1.1常用方法

abstract voidclose() 关闭流并释放与之相关联的任何系统资源。voidmark(int readAheadLimit) 标记流中的当前位置。booleanmarkSupported() 告诉这个流是否支持mark()操作。intread() 读一个字符intread(char[] cbuf) 将字符读入数组。abstract intread(char[] cbuf, int off, int len) 将字符读入数组的一部分。intread(CharBuffer target) 尝试将字符读入指定的字符缓冲区。booleanready() 告诉这个流是否准备好被读取。voidreset() 重置流。longskip(long n) 跳过字符

2.1.2常用类

2.2 字符流输出Writer

2.2.1常用方法

Writerappend(char c) 将指定的字符附加到此作者。Writerappend(CharSequence csq) 将指定的字符序列附加到此作者。Writerappend(CharSequence csq, int start, int end) 将指定字符序列的子序列附加到此作者。abstract voidclose() 关闭流,先刷新。abstract voidflush() 刷新流。voidwrite(char[] cbuf) 写入一个字符数组。abstract voidwrite(char[] cbuf, int off, int len) 写入字符数组的一部分。voidwrite(int c) 写一个字符voidwrite(String str) 写一个字符串voidwrite(String str, int off, int len) 写一个字符串的一部分。

2.2.2常用类

三、File类

通过File类中方法对文件进行创建删除,重命名登操作。

3.1常用方法

booleancanExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。booleancanRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。booleancanWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。intcompareTo(File pathname) 比较两个抽象的路径名字典。booleancreateNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。static FilecreateTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。static FilecreateTempFile(String prefix, String suffix, File directory) 在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。booleandelete() 删除由此抽象路径名表示的文件或目录。voiddeleteOnExit() 请求在虚拟机终止时删除由此抽象路径名表示的文件或目录。booleanequals(Object obj) 测试此抽象路径名与给定对象的相等性。booleanexists() 测试此抽象路径名表示的文件或目录是否存在。FilegetAbsoluteFile() 返回此抽象路径名的绝对形式。StringgetAbsolutePath() 返回此抽象路径名的绝对路径名字符串。FilegetCanonicalFile() 返回此抽象路径名的规范形式。StringgetCanonicalPath() 返回此抽象路径名的规范路径名字符串。longgetFreeSpace() 返回分区未分配的字节数 named此抽象路径名。StringgetName() 返回由此抽象路径名表示的文件或目录的名称。StringgetParent() 返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。FilegetParentFile() 返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。StringgetPath() 将此抽象路径名转换为路径名字符串。longgetTotalSpace() 通过此抽象路径名返回分区 named的大小。longgetUsableSpace() 返回上的分区提供给该虚拟机的字节数 named此抽象路径名。inthashCode() 计算此抽象路径名的哈希码。booleanisAbsolute() 测试这个抽象路径名是否是绝对的。booleanisDirectory() 测试此抽象路径名表示的文件是否为目录。booleanisFile() 测试此抽象路径名表示的文件是否为普通文件。booleanisHidden() 测试此抽象路径名命名的文件是否为隐藏文件。longlastModified() 返回此抽象路径名表示的文件上次修改的时间。longlength() 返回由此抽象路径名表示的文件的长度。

四、ZIP压缩输入流/输出流

使用ZipOutputStream与ZipInputStream实现文件压缩解压缩在java.util.zip包中

1.压缩ZipOutputStream

1.压缩方法

voidclose() 关闭ZIP输出流以及正在过滤的流。voidcloseEntry() 关闭当前的ZIP条目,并定位流以写入下一个条目。voidfinish() 完成编写ZIP输出流的内容,而不关闭底层流。voidputNextEntry(ZipEntry e) 开始编写新的ZIP文件条目,并将流定位到条目数据的开头。voidsetComment(String comment) 设置ZIP文件注释。voidsetLevel(int level) 设置DEFLATED的后续条目的压缩级别。voidsetMethod(int method) 设置后续条目的默认压缩方法。voidwrite(byte[] b, int off, int len) 将一个字节数组写入当前的ZIP条目数据。

2.解压缩ZipInputStream

2.1常用方法

intavailable() EOF到达当前条目数据后返回0,否则返回1。voidclose() 关闭此输入流并释放与流相关联的任何系统资源。voidcloseEntry() 关闭当前的ZIP条目,并定位流以读取下一个条目。protected ZipEntrycreateZipEntry(String name) 为指定的条目名称创建一个新的 ZipEntry对象。ZipEntrygetNextEntry() 读取下一个ZIP文件条目,并将流定位在条目数据的开头。intread(byte[] b, int off, int len) 从当前ZIP条目读取到字节数组。longskip(long n) 跳过当前ZIP条目中指定的字节数。

代码如下(示例):

public class MyZip { private void zip(String zipFileName,File inputFile) throws IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); zip(out,inputFile,""); System.out.println("压缩中..."); out.close(); } public void zip(ZipOutputStream out,File f,String base) throws IOException { if(f.isDirectory()) { File[] f1 = f.listFiles(); if(base.length()!=0) { out.putNextEntry(new ZipEntry(base+"/")); } for(int i=0;i<f1.length;i++) { zip(out,f1[i],base+f1[i]); } }else { out.putNextEntry(new ZipEntry(base)); FileInputStream in = new FileInputStream(f); int b; System.out.println(base); while((b=in.read())!=-1) { out.write(b); } in.close(); } } public static void main(String[] args) { MyZip book = new MyZip(); book.zip(zipFileName, inputFile); System.out.println("压缩完成"); } }

总结

提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了I/O的使用以及方法。

最新回复(0)