文档操作
操作文档需要先创建File对象,创建时传入文件路径,再通过File类的方法对文档进行增删改查的操作
//创建对象
File file=new File(pathname);//传入文件路径,可以是已有的,也可以是未创建的;
//判断类型方法
file.isDirectory();//判断指定路径的是不是文件夹,是返回true;
file.isFile();//判断指定路径的是不是文件,是返回true;
file.exists();//判断指定路径的文件(夹)是否已存在,已存在返回true;
//创建
file.mkdir();//根据指定的路径创建文件夹,只能在已有的基础上向下创建一级;
file.mkdirs();//根据指定的路径创建文件夹,可以一次性创建多级文件夹
//注意mkdirs方法,如果左后一级是文件名,也会被当作是文件夹名创建
file.createNewFile();//在指定的路径下创建一个文件,会抛出IOException
//获取相关信息
file.getName();//获取最后一级文件名
file.getParentFile();//获取父级文件路径的对象;
file.length();//返回文件的长度;
file.getPath();//获取相对路径(不在默认根目录下会返回绝对路径);
file.getAbsolutePath();//返回绝对路径
//删除文件
file.delete();
//修改文件名
file.renameTo();//传入新的文件及路径名(在同一位置)
字节输入流
普通的字节输入流使用的是FileInputStream,读取文件过程如下:
//使用try-catch捕获异常
FileInputStream fis=null;
try{
//这里抛出的FileNotFoundException是IOException的子类,就一并捕获了
fis=new FileInputStream(pathName);
int temp;
/*这是第一种读取方式,需要注意的是,fis没有判断是否还有未读的方法,
每读取一次,返回字节,并将指针后移一位,因此没循环一次只能调用一次
read方法,否则会出现数据丢失的情况;
注意以下写法一次只能读取一个字节,若要读取的文件有中文(占2个或3个
字节,视编码字符集而定)时,不能正常的将中文打印出来,需要将字节保
存到数组中,再统一打印*/
while((temp=fis.read())!=-1){
System.out.println((char)temp);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
fis.close();//输入流用完后,要及时关闭,避免浪费资源
}catch(IOException e){//关闭流的操作也会抛出IOException
e.printStackTrace();
}
}
//单独写下第二种读取方式
int len;//记录每次读取有效字节数;
//这里数组长度可以自己定,大小没有关系,一般会写大一点,如1024
byte[] bytes=new byte[3];
while((len=fis.read(bytes))!=-1){
/*现在一次读取会读取3个,直至剩余内容不够3个字节,每次返回的int数字是
每次读取的有效字节数,读取不到时返回-1
这种读取方式比第一种单独读一个字节的要高*/
}
字节输出流
普通的字节输出流使用的是FileOutputStream,写入文件过程如下:
String str="HelloWorld!"//目标是将这段文字写到指定的文件中
FileOutputStream fos=null;
tyr{
//这里一样会抛出FileNotFoundException
//可以在路径名后面追加一个boolean参数,true表示在原文件中追加写入
fos=new FileOutputStream(pathName);
//可以一次写一个字节数组,也可以配合输入流每读取一个字节写入一个字节
fos.write(str.getBytes());
}catch(IOException e){
e.printStackTrace();
}finally{
try{
fos.close();//输出流用完后,要及时关闭
}catch(IOException e){
e.printStackTrace();
}
}
字节输入流和输出流配合就能达成复制文件的效果,配合delete方法删除文件能达成移动文件的效果。由于所有文件都是使用二进制字节存储的,所以复制和移动的文件没有类型限制,文本文档、音频、图片和视频都可以