IO、异常相关小结

1.对于异常机制的理解
一种指的是error(逻辑错误),另外一种指的是Exception。大多数异常都是指Exception,因此通常说的异常就
是指Exception。在使用File类的方法时,如创建文件时可能会出现一种情况:要创建的文件指向了U盘中一个路径,当程序运行时,
可能有人将U盘拔掉了!这时我们的程序执行就会出错,即抛出异常。异常情况是指程序在运行时,可能由与外部
系统的条件变更(与我们设想的不一致)要,而导致程序可能会出错的情况,如我们的代码要连结数据库。但数据库
未启动,要创建目录,操作系统上却已存在同名的真实文件;即所谓异常是指可由与外部系统的,导致程序可能出错
(中断运行)的原因。异常被表示成Exception类,在java.lang包下面。针对强制检测异常有try catch块处理异常:
try{
//(A)执行的代码.....
}catch(Exception ef){
//(B)出现异常情况的代码
ef.printStackTrace();
}如果程序执行成功,就只运行(A)部分,跳过(B)部分;若在执行时(A)代码前的语句出现错误,(A)就不会
执行,运行(B)部分,抛出异常,通过调用ef.printStackTrace();方法打印出异常的详细信息。
另外可以使用throws关键字声明方法可能会抛出的异常:public void writeFile(String path, String content)
throws Exception{
但main方法中要么try catch,要么也是throws。
2.文件基本操作:
统计指定目录下的文件个数,文件夹个数,总大小
import java.io.File;
public class FileCount1 {
public static void main(String[] args){
String path="E:\\暑期培训";
FileCount1 fc=new FileCount1();
fc.count(path);
int result=fc.count(path);
System.out.println("共统计文件:"+result);
}
public int count(String path){
int count=0;
//根据路径创建一个文件对象
java.io.File fl=new java.io.File(path);
//判断文件是否存在
if(!fl.exists()){
System.out.println("给定的文件路径不存在!");
return 0;
}
//如果存在的话,就将这个文件夹下面的所有文件对象装入数组中
java.io.File[] fs = fl.listFiles();
if(fs==null){
System.out.println("给定的文件路径不是文件夹");
return 0;
}
//遍历文件数组
for(int i=0;i<fs.length;i++){
//得到一个文件
java.io.File f=fs[i];
//得到文件的路径
String str=f.getAbsolutePath();
//如果找到的是一个标准文件
if(f.isFile()){
count++;
System.out.println("得到一个文件:"+str);
}
//如果找到的是一个文件夹
else if(f.isDirectory()){
//递归调用
count+=count(str);
}
}
return count;
}
//统计文件夹的个数的方法与统计文件个数的方法差不多,不同之处是:
//统计文件夹的个数时,跟是否是标准文件无关
//因此只要判断是否是文件夹就可,使用递归调用方法
if(f.isDirectory()){
count++;
count+=count1(str);
System.out.println("得到一个文件夹"+str);
}
//统计文件大小的方法也与统计文件方法类似
//只是遍历文件数组时,
//需得到文件的大小
long len=f.length();
//如果是一个标准文件
if(f.isFile()){
sum+=len;
}
//如果找到的是一个文件夹
else if(f.isDirectory()){
//递归调用
sum+=sum(str);
}
}
3.文件输入输出流基本使用
输入流(InputStream)和输出流( OutputStream)是java中可以按最小数据单位读取的流,即每次读写一个字节
,基础流是直接连结到输入源的流。是BufferedInputStream和BufferedOutputStream等类型流的父类。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class FileTest1 {
public static void main(String args[]){
//将D:\接口.txt中的内容复制到D:\接口.txt中
String path="D:\\接口.txt";
String path1="D:\\复件-接口.txt";
FileTest1 ft=new FileTest1();
//读取文件中的数据
String str=new String(path);
System.out.println(str);
//将数据写入指定的文件中
ft.writeFile(path1, str);
}
/**
* 从文件中读取数据
* @param path 文件的路径
*/
public String readFile(String path){
try {
//根据文件路径创建一个文件输入流
java.io.FileInputStream fis=new java.io.FileInputStream(path);
//得到流的字节数
int len=fis.available();
//根据字节数创建一个数组
byte[] bt=new byte[len];
//读取一个字节
int t=fis.read();
int i=0;
while(t!=-1){//如果没有到达文件末尾,就继续读取
//将读取到的字节放入字节数组中
bt[i]=(byte)t;
//继续读取下一个字节
t=fis.read();
i++;
}
//关闭流
fis.close();
//将字节数组转换成字符串
String str=new String(bt);
//返回字符串
return str;
} catch (Exception ef) {
ef.printStackTrace();
}
return null;
}
//将指定的数据写入指定的文件中
public void writeFile(String path,String content){
try {
//根据文件路径创建一个文件输出流,若文件不存在,系统会自动创建一个文件
java.io.FileOutputStream dos=new java.io.FileOutputStream(path);
//将字符串转换成字节数组
byte[] bs=content.getBytes();
//遍历数组,取出字节,写入流中
for(int i=0;i<bs.length;i++){
//写出字节
dos.write(bs[i]);
}
//刷新流,强制输出
dos.flush();
//关闭流
dos.close();
} catch (Exception ef) {
ef.printStackTrace();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值