黑马程序员——基础学习日记(IO流)

来源:互联网 发布:面向对象语言 python 编辑:程序博客网 时间:2024/06/04 19:38
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

IO流、笔记

IO流概述
(1)用来处理设备(硬盘,控制台,内存)间的数据。
(2)java中对数据的操作都是通过流的方式。
(3)java用于操作流的类都在io包中。
(4)按照流操作的数据的类型不同:分为字节流和字符流。字符流是为了方便中文的操作而来的。
(5)按照流的流向不同分为:输入流,输出流


File:操作文件的属性等信息
IO流:操作文件中的数据

File: 代表的文件夹 或者 文件的一个引用
构造方法:
public File(String pathname):将传入的字符串路径信息封装成一个File对象
public File(String parent, String child):将传入的路径信息连接,并封装成一个File对象。(parent:指定文件所在的文件夹目录;child:指定的文件或目录)
public File(File parent, String child):将传入的路径信息连接,并封装成一个File对象。(parent:封装的一个路径信息;child:指定的文件或目录)

相对路径: 不带盘符的路径
绝对路径: 带盘符的路径

方法:
创建功能:
public boolean createNewFile():在该目录下创建一个文件
public boolean mkdir():在该目录下创建一个目录(文件夹)
public boolean mkdirs():创建多层文件夹
删除功能:
public boolean delete():删除文件或文件夹
判断功能:
public boolean canRead():判断该路径的目录或文件是否可读
  public boolean canWrite():是否可写
  public boolean isHidden():是否是隐藏的
    public boolean exists():此路径的文件或目录是否存在
  public boolean isAbsolute():次路径是否为绝对路径
  public boolean isDirectory() :是否是文件夹
  public boolean isFile():是否是文件
重命名功能:
public boolean renameTo(File dest):若dest与此目录是同一目录下,改名;若dest与此目录不是同一目录,剪切并改名;
获取功能:
public String getAbsolutePath():获取绝对路径名的字符串
  public String getName():返回该目录或文件的名字,若不存在返回空字符串(构造函数时写的目录)
  public String getParent():返回父目录,如果没有指定父目录(构造函数时写的目录的相对路径),返回null
  public String getPath():将此抽象路径名转换成字符串
  public long length() :返回此抽象路径名表示的目录或文件的大小
  public long lastModified():返回此抽象路径名表示的目录或文件最后的修改时间
  public String[] list() :返回此抽象路径名中所有文件和目录的文件名,若此抽象路径名是个文件,返回null,每个字符串表示的是一个文件名,不是一个完整的路径
  public File[] listFiles() :返回此抽象路径名中所有文件和目录的文件名,若此抽象路径名是个文件,返回null,每个对象是个完整的路径
  public static File[] listRoots():

(重点)递归:在该方法中,调用该方法
注意: 递归程序不能无限循环, 必须要有出口条件
如果不加出口条件,报出栈溢出溢出

IO:对文件等数据的 读写操作, 还可以进行网络数据的读写

IO的分类:
字节流:
字节输入流:InputStream
字节缓冲输入流:BufferedInputStream

字节输出流:OutputStream
字节缓冲输出流: BufferedOutputStream
(输出流的目的地是文件,会自动创建,如果文件存在,覆盖[删除、新建])
字符流:
字符输入流:Reader
字符缓冲输入流: BufferedReader

字符输出流:Writer
字符缓冲输出流: BufferedWriter
(输出流的目的地是文件,会自动创建,如果文件存在,覆盖[删除、新建])

InputStream:
FileInputStream构造方法:
public FileInputStream(File file):创建一个字节输入流,此流关联传入的文件
public FileInputStream(String name):创建一个字节输入流,此流关联传入的字符串路径所指向的文件

方法:
public abstract int read()  读取一个字节
public int read(byte[] b)读取多个字节

OutputStream:
FileOutputStream构造方法:
  public FileOutputStream(File file):创建一个字节输出流,此流关联传入的文件
public FileOutputStream(File file, boolean append):创建一个字节输出流,此流关联传入的文件。若 append 为 true 可在此文件内容最后追加内容。
public FileOutputStream(String name):创建一个字节输出流,此流关联传入的路径
public FileOutputStream(String name, boolean append):创建一个字节输出流,此流关联传入的路径。若 append 为 true 可在此文件内容最后追加内容。
方法:
public void write(byte[] b)  写入一个字节数组
public void write(byte[] b, int off, int len)
public abstract void write(int b) 写入一个字节

Reader:
FileReader构造方法:
public FileReader(File file):创建一个字符输入流,此流关联传入的文件
public FileReader(String fileName) :创建一个字符输入流,此流关联传入的路径

方法:
public int read() : 一次读取一个字符
public int read(char[] cbuf): 一次读取多个字符


Writer:
FileWriter构造方法:
public FileWriter(File file):创建一个字符输出流,此流关联传入的文件
public FileWriter(String fileName):创建一个字符输出流,此流关联传入的路径

方法:
public void write(char[] cbuf): 把字符数组 写入流所对应的文件中
public abstract void write(char[] cbuf, int startIndex, int len)把字符数组的一部分  写入流所对应的文件中
public void write(int c) : 写入单个字符
public void write(String str) : 写入字符串
public void write(String str, int startIndex,  int len): 写入字符串的一部分
public abstract void close():关闭流,并释放与此流有关的资源 
public abstract void flush():强制输出(输入)所缓冲的字节到目标

BufferedInputStream:
构造方法:
public BufferedInputStream(InputStream in) 把基本的流 封装成高效的流
public BufferedInputStream(InputStream in, int size)把基本的流 封装成高效的流, 同时指定缓冲区的大小


BufferedOutputStream:
构造方法:
public BufferedOutputStream(OutputStream out) : 通过一个基本的字节输出流, 把它包装成 高效的 字节输出缓冲流
public BufferedOutputStream(OutputStream out, int size): 把基本的流 包装成 高效的流

BufferedWriter: 
方法:
newLine()  换行符

BufferedReader:
方法:
readLine() 读取一行字符串


转换流:
理解上:
InputStreamReader:字节 ---> 字符 
OutputStreamWriter: 字符 --> 字节
使用上:

接收的参数都是字节流, 返回的结果都是 字符流

InputStreamReader:字节到字符的桥梁
OutputStreamWriter:字符到字节的桥梁
这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。


常见编码表:
ASCII: 
GB2312: 国标码 简体中文 中文使用2个字节
GBK 简体中文
GB18030 简体中文
ISO-8859-1 西欧编码 
Unicode: 统一码, 不包含 ASCII
UTF-8 : 包含了 各种码表,  中文使用3个字节

编码与解码:
编码: 理解为 加密的过程
解码: 理解为 解密的过程

在String中 编解码:
编码:
getBytes( String charName ) : 按照给定的码表进行编码(加密)
解码:
new String( byte[] bys, String charName ): 按照给定的码表进行解码(解密)

在IO流中编解码:
编码:
new OutputStreamWriter( OutputStream os, String charName)按照给定的码表进行编码(加密)
解码:
new InputStreamReader( InputStream is, String charname )按照给定的码表进行解码(解密)


可变参数:
可变参数概述: 方法中参数列表的个数不确定的时候,可以使用可变参数来表示
格式:
修饰符 返回值类型 方法名(参数列表  , 可变参数...)

注意事项: 
1: 在一个方法中,可变参数必须在参数列表的末尾
2: 在一个方法中,只能有一个可变参数


PrintStream: 打印字节流
PrintWriter: 打印字符流
构造方法:
public PrintWriter(Writer):创建不带自动刷新的PrintWriter
public PrintWriter(OutputStream):根据现有OutputStream创建不带自动刷新的PrintWriter,中间有转换流:OutputStreamWriter
public printWriter(File):根据指定文件,创建不带自动刷新的PrintWriter,中间有转换流:OutputStreamWriter
public printWriter(String):根据指定的文件路径,创建不带自动刷新的PrintWriter,中间有转换流:OutputStreamWriter

public PrintWriter(Writer, boolean autoFlush):创建带有自动刷新的PrintWriter
public PrintWriter(OutputStream, boolean autoFlush):创建带有自动刷新的PrintWriter,中间有转换流OutputStreamWriter

方法:
print(参数类型)
println(参数), 如果开启了自动刷新, 自动写入到流中
printf(参数), 如果开启了自动刷新, 自动写入到流中

Properties: 
特点:
1: Map集合
2: 它是Hashtable的子类
3:  它里面的键和值 都是String类型, 所以该集合没有泛型
方法:
public setProperty(String key, String value)  --- 等价于  put(key, value)
public getProperty(String key)  -----  等价于 get(key)
public getProperty(String key, String defaultValue) 查找给定的键对应的值, 如果该键不存在, 返回给定的默认值
public void list(OutputStream ): 把集合中的元素 存储到流所对应的文件中
public void list(Writer) :  把集合中的元素 存储到流所对应的文件中
public void load(InputStream) : 从流中读取数据 存储到集合中
public void load(Reader):  从流中读取数据 存储到集合中
public void store(Writer, String value) : 把集合中的元素 存储到流所对应的文件中
public void store(OutputStream, String value): 把集合中的元素 存储到流所对应的文件中

ObjectOutputStream序列化流:
作用: 把已经序列化的对象 写入到流中
构造方法:
public ObjectOutputStream( OutputStream )
方法:
public void WriteObject(Object obj): 把序列化的对象 写入到流中

ObjectInputStream反序列化流:
作用: 从流中把序列化对象  读取出来
构造方法:
public ObjectInputStream ( InputStream)
方法:
public Object readObject() : 把序列化对象  从流中读取出来
  • 0 0