
本文共 3108 字,大约阅读时间需要 10 分钟。
文章目录
Io流
File类
相对路径:相较于某个路径下,指明的路径
绝对路径:包含盘符在内的文件或文件目录的路径
路径的分隔符和系统有关:
windows和Dos系统默认使用“ \ "表示
Unix和URL使用” / “表示
创建File的方法
File(String, int)File(String, File)File(String)File(String, String)File(File, String)File(URL)
IO流
用于处理设备之间的数据传输
输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存中)
输出:将程序(内存)数据输出到磁盘、光盘等存储文件
抽象基流 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
抽象基流 | 节点流(文件流) | 缓冲流(处理流的一种) |
---|---|---|
InputStream | FileInputStream | BufferedInputStream(read (byte[] buffer)) |
OutputStream | FileOutputStream | BufferedOutputStream(write (byte[] buffer, 0, len))/flush() |
Reader | FileReader | BufferedReader(read (char[] cbuffer)/readline()) |
Writer | FileWriter | BufferedWriter(write (char[] cbuffer, 0, len))/flush() |
FileReader
read()返回读入的一个字符,如文件到达末尾则返回-1。
异常处理:为了保证流资源一定可以关闭,需要try-catch-finally。
读入的文件一定要存在,否则会有FIleNotFoundException
FileWriter
输出操作,对应的File可以不存在,并不会报异常,
如果不存在,在输出过程中,会自动创建文件;
如果文件存在使用的时FileWriter(File, false)/FileWriter(File)会对原有文件覆盖,如果使用的是FileWriter(File, true),不
会对原有文件覆盖而是追加。
不能用字符流处理图片,要用字节流。
对于文本文件,使用字符流处理(.txt、.java、.c、.cpp …)
对于非文本文件,使用字节流处理(.jpg、.mp3、.mp4、.avi、.doc、.ppt …)
处理流
缓冲流
BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
作用:提高流的读取、写入的速度
关闭外层流的同时,内层流也会自动关闭,因此内层流的关闭可以省略
处理流就是”套接“在已有流的基础上
public class fileStudy { public static void main(String[] args) { BufferedInputStream bis = null; BufferedOutputStream bos = null; try { File file = new File("E:\\holiday\\java\\io\\a.txt"); bis = new BufferedInputStream(new FileInputStream(file)); bos = new BufferedOutputStream(new FileOutputStream("E:\\holiday\\java\\io\\write.txt")); int len = 0; byte[] buf = new byte[1024]; while ((len = bis.read(buf)) != -1) { bos.write(buf, 0 ,len); } } catch (IOException e) { e.printStackTrace(); } finally { if (bos != null){ try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } if (bis != null){ try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } } }}
转换流
InputStreamReader、OutputStreamWriter(属于字符流)
作用:提供字节流与字符流之间的转换
对于转换流中的字符集取决于文件保存时的编码格式
标准的输入、输出流
System.in 标准的输入流,默认从键盘输入
System.out 标准的输出流,默认从控制台输出
System类用setIn(InputStream)、setOut(OutputStream)方式重新指定输入和输出的方式
打印流
PrintStream、PrintWriter
数据流
DataInputStream、DataOutputStream
用于读取或写出基本数量类型的变量或字符串
对象流
ObjectInputStream、ObjectOutputStream
用于读取和存储基本数据类型或对象的处理流,强大之处在于可以把Java中的对象写入到数据源,也能把对象从数据源中还原回来。
序列化:用ObjectOutputStream类保存基本数据或对象的机制。
反序列化:用ObjectInputStream类读取基本数据或对象的机制。
对象序列化机制:允许内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流永久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其他程序获取了这种二进制流,就可以恢复成原来的java对象。
随机存取文件流
RandomAccessFile实现了DataInput、DataOutput这两个接口,意味着这个类既可读又可写。此对象包含一个记录指针,用于标识当前读写出的位置。
getFilePointer()获取文件记录指针的当前位置
如果此流为输出流,如果写到的文件不存在,则在运行过程中自动创建,
如果写出的文件存在则会覆盖原来内容(默认从头覆盖)。
ByteArrayOutputStream内部有一个数组对于字符来说不会有乱码现象,建议用
发表评论
最新留言
关于作者
