IO流:异常,File,递归
异常:Throwable
严重问题:Error
问题:Exception分为:编译时期异常(不是Runtime~~异常):必须处理运行期异常(Runtime~~):代码不够严谨
出现异常时候,如果我们没处理,最终jvm会默认的处理把异常的名称,原因及出现问题等信息输出在控制台。同时结束程序处理:
A.try...catch...finally处理格式:
try{
可能出现问题的代码;
}catch(异常名变量)
{
针对问题的处理
;}finally{
释放资源
;}
注意try里面的代码越少越好,catch必须有内容可以多写,能明确异常最好不能就末尾catch个父类finallly:被finally控制的语句体一定会执行
B.抛出throws 异常类名
注意;这个格式必须跟在方法的括号后面
A.B.中:能自己处理用try不能用throws,后续程序要运行用try否用throws
自定义异常:子类<父类,子类不能扩展,子类有异常父类没有的时候不能抛出只能try继承Exception
RuntimeException
File:对文件和目录路径进行抽象表示。
构造方法:
File(String pathname):根据一个路径得到File对象
(String parent,String child):根据一个目录或一个子文件/文件夹,得到File对象
(File parent,String child)
删除功能:
public boolean delete()不走回收站
重命名功能:
public boolean renameTo(File dest);
判定功能:
public boolean isDirectory()判定是否是目录
isFile()判定是否是文件
exists()存在
canRead()可读
canWrite()可写
isHidden()隐藏
基本获取功能:
public String getAbsolutepath()获取绝对路径
getpath()相对
getname()名称
long lenth()字节个数
long lastModified()获取最后一次修改时间
高级获取功能:
public Stirng[] list()获取指定目录下的文件和目录名称数组
public File[] listFiles(): File数组
过滤器:
public String[] list(FilenameFilter filter)实现FilenameFilter接口重写accept方法
public File[] listFiles(
递归:方法中调用自己 分解法,合并法
注意事项:一定要有出口,次数不要太多,构造方法不能递归
IO流:
按流向分:输入流,输出流
数据类型:字节流,字符流
字节流:InputStream
OutputStream
字符流:ReaderWriter
OutputStream:写入三步骤如下
构造方法:
FileOutputStream(File file,true);加true追加写入
(String name);
写入方法
write(Byte[]byte);
释放方法:
close();
InputStream:
构造方法:
FileInputStream(File file);
读取方法:
int read();读取一个
int read(byte[] b,Start,end):读取一个字节数组,int返回读取数,值赋予给b
释放方法:
close();
BufferedOutputSrteam:
构造方法:
BufferedOutputSrteam(OutputStream out)
编码:
解码
String (byte[] bytes, String charsetName);通过字符集解码字节数组
编码
byte[] getBytes(String charsetName)
编码:把看的懂的变成看不懂的
解码:把看不懂的变成看得懂的
字符流:
OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
OutputStreamWriter
flush()强行写入
int read():读取一个字符
int read(char[] chs):读取一个字符数组
简化:FileWriter;
字符缓冲流:BuffereWriter;
特殊功能:BuffereWriter:注意:true
public void newLine();根据系统来决定换行符
BuffereReader:
public String readLine();一次读取一行数据 PS:读不到返回null
LineNumberReaderDemo:父亲是bufreader;
publie int getLineNumber():获取当前行号
public void setLineNumber(int line):设置从几开始行号
了解:
数据输入输出流:DataOutputStream 基础数据操作
内存操作流:临时处理,释放close没意义
字节数组:ByteArrayInputStream
字符数组:CharArrayReader
字符串:StringReader
打印流:只能操作目的地,只能写数据,可以操作任意类型数据(调用print打印),自动刷新PrintWritor
字节打印流:PrintStream
字符打印流:PrintWriter
开启自动刷新:new PrintWriter(new File(),true)写入的时候用println替代print打印。
标准输入流:实现控制器输出或输入的时候通过bufferedR/W来实现
public static final InputStream in InputStream is=System.in;
PrintStream out PrintStream ps=System.out;
随机访问流:随机访问文件的行为RandomAccessFile不属于流
构造方法:RandomAccessFile(String name/File file,String mode)mode表示为(r只读,rw读写)
合并流:一般是a->b合并用法是a+c->b
SequenceInputStream(InputStream s1,InputStream s2)
合并多个用枚举:vector->Enumeration<> **=v.elements();
序列化流/对象操作流:
(写)把对象按照流一样的方式存入文本文件或者在网络中传输。把对象当流操作
new ObjectOutputStream(new FileOutputStream())
writeObject(Object obj)
对象必须实现Serializable接口(标记接口)
(读)反序列化:流->对象
注意定义Serializable ID. ,使用transient修饰的变量将不会被ID序列化。
properties(作为map集合来使用):属性集合类,可以和IO流相结合使用类,可以保存流中加载的键和值。
public Object setProperty(String key,String value)添加元素
String get (String key)获取元素
setstringPropertyNames()获取所有键的集合
与IO流使用:
public void load(Reader reader):把文件中的数据读取到集合中
public void store(Writer writer,String comments)把集合的数据储存到文件,com文件注释
NIO包写的IO流:在内存中操作。
JDK7IO改变:
path:路径
paths:有一个静态方法返回路径
public static path get(URI uri)
Files:提供了静态方法,操作文件工具类
public static long copy(Path source,OutputStream out)
public static Path write(paths.get("array.txt"), array,Charset.forName("GBK"));