java.io.File类 表示系统文件(即文件和目录)
(1)创建对象: File file=new File(String pathname );
(2)调用方法:操作文件或目录属性eg: c:\\test.txt c:/test.txt
Separator默认分隔符:unix“/”; windows”\\”
(3)常用方法:
File f=new File(“c:”+File.separator+”test”);
f.exists(); //判断是否存在
f.delete(); //删除文件或目录名
f.createNewFile(); //创建文件
f.mkdir(); //抽象路径名指定的目录
f.mkdirs();包括所有必需但不存在的目录
f.getPath() ; (getAbsolutePath()) //当前路径
f.getParentFile() ; //父目录对象
f.isDirectory();
File[] files=f.listFiles();//返回当前正在遍历的目录中文件和目录的File实例数组
eg1:递归遍历文件夹
public static void main(String[] args) { File f=new File("f:"+File.separator); showAllFiles(f); } public static void showAllFiles(File f){ if(f!=null){ if(f.isDirectory()){ // 是否为目录 File[] files=f.listFiles(); // 返回当前正在遍历的目录中的文件和目录的File实例数组 if(files!=null){ for(File file:files){ showAllFiles(file); } } }else{ System.out.println(f.getPath()); } } }eg2:判断文件或目录是否存在,若存在进行删除操作,反之进行创建;
package file; import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) { File f=new File("d:"+File.separator+"test.txt"); if(f.exists()){ // 判断文件或目录是否存在 f.delete(); // 删除文件 System.out.println("文件已删除"); }else{ try { f.createNewFile(); // 创建新文件 System.out.println("创建成功!"); } catch (IOException e) { e.printStackTrace(); } } } }eg3:遍历的目录中文件和目录
package file; import java.io.File; public class ListFilesDemo { public static void main(String[] args) { File f=new File("d:"+File.separator); File[] files=f.listFiles(); System.out.println(files.length);//文件长度 for(File file:files){ System.out.println(file); } } }eg4:创建目录,并进行当前路径和父目录路径进行展示;
package file; import java.io.File; public class DirDemo { public static void main(String[] args) { File f=new File("e:"+File.separator+"test1"+File.separator+"test2"); boolean flag=f.mkdirs(); // 创建目录,包括所有必需但不存在的父目录 System.out.println(flag?"目录创建成功":"创建失败"); System.out.println(f.getPath()); System.out.println(f.getParentFile()); } }二、IO流 的基本原理及分类
(1)数据流是指数据通信的通道
程序中输入、输出是以“流”方式进行的。
(2)IO流的分类
1、按流向分:
输入流:程序从数据源读取数据的流
输出流:程序向数据源写入数据的流
2、按数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
3、按功能分:
节点流:用于直接操作目标设备的流
处理流:是对于一个已存在的流的连接和封装,通过对 数据的处理为程序为程序提供更强大、灵活的读写功能
(3)抽象流类:(JDK所提供的所有流类位于java.io包中,分别继承以下四种流类)
以上四个抽象流类的重要方法: InputStream: read(xx)读取字节系列方法; OutputStream: write(xx)写入字节系列方法;
Reader: read(xx)读取字符系列方法;
Writer: write(xx)写入字符系列方法。
三、 文件字节流和 文件字符流
(1)类别
文件字节流:FileInputStream,FileOutputStream;
文件字符流:FileReader,FileWriter.
(2)构造方法:
a. FileInputStream类: FileInputStream(File file);
FileInputStream (Stringname); b.FileOutputStream类: FileOutputStream (File file ); FileOutputStream (Stringname); FileOutputStream (String name,boolean append);注意:前两种构造方法在向文件写数据时将覆盖文件中原有的内容;
创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空文件。
c.FileReader类:FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新FileReader;
FileReader(StringfileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
d.FileWriter类:FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter;
FileWriter (File file , boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。; FileWriter (String fileName ) 根据给定的文件名构造一个 FileWriter 对象; FileWriter (String fileName , boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值 来构造 FileWriter 对象。eg5:从文件向程序中读取数据(FileInputStream、InputStream):
package stream; import java.io.*; public class FileInputStreamDemo { public static void main(String[] args) { File f=new File("e:"+File.separator+"test.txt"); InputStream input=null; try { input=new FileInputStream(f); /* 每次读取一个字节数据 int data=0; while((data=input.read())!=-1){ byte b=(byte)data; byte[] array=new byte[1]; array[0]=b; String str=new String(array); System.out.print(str); }*/ byte[] b=new byte[1024]; // 自定义缓冲区(“卡车”) int len=input.read(b); // 读取数据到byte[]数组中,返回读入到byte[]数组中的字节数 System.out.println("读取的内容是:"+new String(b,0,len)); }catch(Exception e) { e.printStackTrace(); }finally{ try { input.close(); // 关闭流 } catch (IOException e) { e.printStackTrace(); } } } }eg6:从程序向文件中写入数据(FileOutputStream、OutputStream):
package stream; import java.io.*; public class FileOutputStreamDemo { public static void main(String[] args) { File f=new File("e:"+File.separator+"test.txt"); OutputStream out=null; try { out=new FileOutputStream(f,true); // 开启追加模式 out.write("秦时明月之君临天下".getBytes());// 直接写入一个字节数组 String data="雪山飞狐"; byte[] b=data.getBytes(); out.write(b,0,4); // 使用三参的write(xxx)方法进行写入 System.out.println(f.length()); System.out.println("写入成功!"); } catch (Exception e) { e.printStackTrace(); }finally{ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }eg7:从文件向程序中读取数据(FileReader、Reader):
package stream; import java.io.*; public class FileReaderDemo { public static void main(String[] args) { Reader r=null; try { r=new FileReader("e:"+File.separator+"test.txt"); int data=r.read(); // 读取一个字符 char c=(char)data; // 转换成字符 System.out.println("第一次读取:"+c); char[] cbuf=new char[1024]; // 自定义缓冲区 int len=r.read(cbuf); // 读取数据放入缓冲区中,返回存入缓冲区中的字符个数 System.out.println("第二次读取:"+new String(cbuf,0,len)); } catch (Exception e) { e.printStackTrace(); }finally{ try { r.close(); } catch (IOException e) { e.printStackTrace(); } } } }eg8:从程序向文件中写入数据(FileWriter、Writer):
package stream; import java.io.*; public class FileWriterDemo { public static void main(String[] args) { Writer w=null; try { w=new FileWriter("e:\\test.txt"); w.write("你好,File、IO".toCharArray()); // 写入字符数组 w.write("ABCDEFG"); // 写入字符串 w.write('a'); // 写入单个字符 w.flush(); // 将缓冲区中的写入内容,刷到磁盘上 System.out.println("写入成功!"); } catch (IOException e) { e.printStackTrace(); }finally{ try { w.close(); } catch (IOException e) { e.printStackTrace(); } } } }