----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------
异常
(1)程序出现的不正常的情况。
(2)异常的体系
Throwable
|--Error 严重问题,我们不处理。
|--Exception
|--RuntimeException 运行期异常,我们需要修正代码
|--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过
(3)异常的处理:
A:JVM的默认处理
把异常的名称,原因,位置等信息输出在控制台,但是呢程序不能继续执行了。
B:自己处理
a:try...catch...finally
自己编写处理代码,后面的程序可以继续执行
b:throws
把自己处理不了的,在方法上声明,告诉调用者,这里有问题
(1)程序出现的不正常的情况。
(2)异常的体系
Throwable
|--Error 严重问题,我们不处理。
|--Exception
|--RuntimeException 运行期异常,我们需要修正代码
|--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过
(3)异常的处理:
A:JVM的默认处理
把异常的名称,原因,位置等信息输出在控制台,但是呢程序不能继续执行了。
B:自己处理
a:try...catch...finally
自己编写处理代码,后面的程序可以继续执行
b:throws
把自己处理不了的,在方法上声明,告诉调用者,这里有问题
(4)finally关键字
A:finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了
B:异常处理的变形
try...catch...finally
try...catch...
try...catch...catch...
try...catch...catch...fianlly
try...finally
A:finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了
B:异常处理的变形
try...catch...finally
try...catch...
try...catch...catch...
try...catch...catch...fianlly
try...finally
(5)自定义异常
继承自Exception或者RuntimeException,只需要提供无参构造和一个带参构造即可
(6)异常的注意实现
A:父的方法有异常抛出,子的重写方法在抛出异常的时候必须要小于等于父的异常
B:父的方法没有异常抛出,子的重写方法不能有异常抛出
C:父的方法抛出多个异常,子的重写方法必须比父少或者小
继承自Exception或者RuntimeException,只需要提供无参构造和一个带参构造即可
(6)异常的注意实现
A:父的方法有异常抛出,子的重写方法在抛出异常的时候必须要小于等于父的异常
B:父的方法没有异常抛出,子的重写方法不能有异常抛出
C:父的方法抛出多个异常,子的重写方法必须比父少或者小
File
(1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件
(2)构造方法
A:File file = new File("e:\\demo\\a.txt");
B:File file = new File("e:\\demo","a.txt");
C:File file = new File("e:\\demo");
File file2 = new File(file,"a.txt");
(3)File类的功能
A:创建功能
(1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件
(2)构造方法
A:File file = new File("e:\\demo\\a.txt");
B:File file = new File("e:\\demo","a.txt");
C:File file = new File("e:\\demo");
File file2 = new File(file,"a.txt");
(3)File类的功能
A:创建功能
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
B:删除功能
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
B:删除功能
public boolean delete()
C:重命名功能
C:重命名功能
public boolean renameTo(File dest)
D:判断功能
D:判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
E:获取功能
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
E:获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
F:高级获取功能
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
F:高级获取功能
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
IO流
IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。Java用于操作流的对象都在IO包中。输入流和输出流相对于内存设备而言。
将外设中的数据读取到内存中:输入。
将内存的数写入到外设中:输出。
流按操作数据分为两种:字节流与字符流。
字符流的由来:
其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字。再对这个文字进行操作。简单说:字节流+编码表。
IO流常用基类-字符流
字节流的抽象基类:InputStream,OutputStream。
字符流的抽象基类:Reader,Writer。
P.S.
由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。
如:Reader的子类FileReader。
需求:将一些文字存储到硬盘一个文件中。
记住:如果要操作文字数据,建议优先考虑字符流。
而且要将数据从内存写到硬盘上,要使用字符流中的输出流:Writer。
硬盘的数据基本体现是文件,希望找到一个可以操作文件的Writer:FileWriter。
字节流的抽象基类:InputStream,OutputStream。
字符流的抽象基类:Reader,Writer。
P.S.
由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。
如:Reader的子类FileReader。
需求:将一些文字存储到硬盘一个文件中。
记住:如果要操作文字数据,建议优先考虑字符流。
而且要将数据从内存写到硬盘上,要使用字符流中的输出流:Writer。
硬盘的数据基本体现是文件,希望找到一个可以操作文件的Writer:FileWriter。
示例1:
-
import java.io.FileWriter;
-
import java.io.IOException;
-
-
public class FileWriterDemo{
-
public static void main(String[] args) throws IOException{
-
//创建一个可以往文件中写入字符数据的字符输出流对象
-
//既然是往一个文件中写入文字数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地)
-
//如果文件不存在,则会自动创建
-
//如果文件存在,则会被覆盖
-
FileWriter fw = new FileWriter("demo.txt" );
-
-
//调用Writer对象中的write(string)方法,写入数据
-
//其实数据写入到临时存储缓冲区中
-
fw.write( "abcde");
-
-
//进行刷新,将数据直接写入到目的地中
-
fw.flush();
-
-
//关闭流,关闭资源,在关闭前会先调用flush刷新缓冲中的数据到目的地。
-
fw.close();
-
}
- }
P.S.
1. close方法只能用一次。2. 流关闭以后不能,不能再调用write方法,否则会报如下异常错误:
如果构造函数中加入true,可以实现对文件进行续写。
示例2:
-
import java.io.FileWriter;
-
import java.io.IOException;
-
-
public class FileWriterDemo{
-
public static void main(String[] args) throws IOException{
-
FileWriter fw = new FileWriter("demo.txt" ,true);
-
-
fw.write( "xixi");
-
fw.close();
-
}
- }
IO流的异常处理方式:为防止代码异常导致流无法关闭,因此在finally中对流进行关闭。
示例3:
-
import java.io.FileWriter;
-
import java.io.IOException;
-
-
public class IOExceptionDemo{
-
public static void main(String[] args){
-
-
FileWriter fw = null;
-
-
try{
-
fw = new FileWriter("demo.txt" );
-
-
fw.write( "abcde");
-
} catch(IOException e){
-
System.out.println(e.toString());
-
} finally{
-
try{
-
fw.close();
-
} catch(IOException e){
-
throw new RuntimeException("关闭失败");
-
}
-
}
-
}
- }
需求:读取一个文文件,将读取到的字符打印到控制台。(使用FileReader)
第一种读取方式:使用read()方法读取文本文件数据
第一种读取方式:使用read()方法读取文本文件数据
示例4:
-
import java.io.FileReader;
-
import java.io.IOException;
-
-
public class FileReaderDemo{
-
public static void main(String[] args) throws IOException{
-
-
FileReader fr = new FileReader("demo.txt" );
-
-
//用Reader中的read方法读取字符
-
int ch = 0;
-
-
while((ch = fr.read()) != -1){
-
System.out.println(( char)ch);
-
}
-
-
fr.close();
-
}
- }
第二种读取方式:使用read(char[])方法读取文本文件数据。
示例5:
-
import java.io.FileReader;
-
import java.io.IOException;
-
-
public class FileReaderDemo{
-
public static void main(String[] args)throws IOException{
-
FileReader fr = new FileReader("demo.txt" );
-
-
//使用read(char[])读取文本文件数据
-
//先创建字符数组
-
char[] buf = new char[3];
-
-
int len = 0;
-
-
while((len = fr.read(buf)) != -1){
-
System.out.println( new String(buf,0,len));
-
}
-
-
fr.close();
-
}
- }
字符流的缓冲区
缓冲区的出现提高了对数据的读写效率。
对应类:
BufferedWriter
BufferedReader
P.S.
缓冲区要结合流才可以使用。
作用:在流的基础上对流的功能进行了增强。
缓冲区的出现提高了对数据的读写效率。
对应类:
BufferedWriter
BufferedReader
P.S.
缓冲区要结合流才可以使用。
作用:在流的基础上对流的功能进行了增强。
示例6:提高写入效率,使用缓冲区。
-
import java.io.BufferedWriter;
-
import java.io.FileWriter;
-
import java.io.IOException;
-
-
public class BufferedWriterDemo{
-
public static void main(String[] args) throws IOException{
-
FileWriter fw = new FileWriter("buf.txt" );
-
-
//为了提高写入的效率,使用了字符流的缓冲区
-
//创建了一个字符写入流的缓冲区对象,并且指定与要被缓冲的流对象相关联
-
BufferedWriter bufw = new BufferedWriter(fw);
-
-
for(int x = 1; x <= 4; x++){
-
//使用缓冲区的写入方法将数据先写入到缓冲区中
-
bufw.write( "abcdef" + x);
-
//写入内容换行方法:newLine();
-
bufw.newLine();
-
bufw.flush();
-
}
-
-
//使用缓冲区的刷新方法将数据刷目的地中
-
bufw.flush();
-
-
//关闭缓冲区,其实关闭的就是被缓冲的流对象
-
fw.close();
-
}
- }
字符流缓冲区:
写入换行使用BufferedWriter类中的newLine()方法。
读取一行数据使用BufferedReader类中的readLine()方法。
bufr.read():这个read方法是从缓冲区中读取字符数据,所以覆盖了父类中的read方法。
bufr.readLine():另外开辟了一个缓冲区,存储的是原缓冲区一行的数据,不包含换行符。
写入换行使用BufferedWriter类中的newLine()方法。
读取一行数据使用BufferedReader类中的readLine()方法。
bufr.read():这个read方法是从缓冲区中读取字符数据,所以覆盖了父类中的read方法。
bufr.readLine():另外开辟了一个缓冲区,存储的是原缓冲区一行的数据,不包含换行符。
示例7:
-
import java.io.BufferedReader;
-
import java.io.BufferedWriter;
-
import java.io.FileReader;
-
import java.io.FileWriter;
-
-
public class CopyTextBufTest{
-
public static void main(String[] args) throws Exception {
-
FileReader fr = new FileReader("buf.txt" );
-
BufferedReader bufr = new BufferedReader(fr);
-
-
FileWriter fw = new FileWriter("buf_copy.txt" );
-
BufferedWriter bufw = new BufferedWriter(fw);
-
-
String line = null;
-
-
//方式一
-
while((line = bufr.readLine()) != null){
-
bufw.write(line);
-
bufw.newLine();
-
bufw.flush();
-
}
-
-
//方式二
-
/*
-
int ch = 0;
-
-
while((ch = bufr.read()) != -1){
-
bufw.write(ch);
-
}
-
*/
-
-
bufr.close();
-
bufw.close();
-
}
- }