一、File类
1.java.io.File类代表系统文件(文件和目录)
访问文件属性步骤
1). 创建文件对象:File file = new File(String pathname);
2). 调用方法:操作文件或目录的属性(路径、权限、日期和时间);
File类就是用来操作文件或目录,将文件和目录作为对象进行操作。
2.File类的属性
seperator默认名称分割符:在linux系统上此字段的值为‘/’;在windows系统中。它为'\\'
为了程序的跨平台使用的特性,层级目录之间的分隔符应该用这个属性值来代表。
3.File类的常用方法
boolean exists() : 判断文件或者目录是否存在;
boolean isFile(): 判断是否是文件;
boolean isDirectory(): 判断是否是目录;
String getName(): 返回此对象表示的文件或者目录的名称;
String getPath(): 返回此对象表示的文件的相对路径名;
String getAbsolutepath(): 返回此对象代表的文件的绝对路径名
boolean delete(): 删除此对象指定的文件或目录;;
boolean createNewFile(): 创建名称的空文件,不创建文件夹;
long length(): 返回文件的长度,单位为字节,如果文件不存在,则返回0L;
boolean mkdir(): 创建此抽象路径名称指定的目录;
boolean mkdirs(): 创建此抽象路径名称指定的目录,包括所有必须但不存在的父目录;
String[] list(): 返回此目录中的文件名和目录名的数组;
File[] listFiles(): 返回此目录中的文件和目录得到File实例数组:
4.使用File类操作一下文件试试:
4.1创建文件/删除we
二、IO流的基本原理
4.2遍历指定目录下的的目录和文件package filedemo; import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) { File file = new File("e:"+File.separator+"test.txt"); if(file.exists()){ //判断该文件是否存在 file.delete(); System.out.println("文件已删除"); }else{ try { file.createNewFile(); //文件不存在的话就创建 System.out.println("文件创建成功~"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
4.3 一个题:递归遍历一个目录下的所有子目录和子文件package filedemo; import java.io.File; public class ListFiles { public static void main(String[] args) { File file = new File("e:"+File.separator); File[] lf = file.listFiles(); //获得当前目录下的文件和目录数组 System.out.println(lf.length); //遍历文件数组 for(File f : lf){ System.out.println(f.getName()); } } }
package filedemo; import java.io.File; public class ShowAllFile { //递归遍历文件 public static void showFiles(File file){ //当所给文件不为空时 if(file != null){ //如果所给文件对象是目录 if(file.isDirectory()){ File[] lf = file.listFiles(); //遍历当前目录下的所有文件和目录 if(lf!=null){ for(int i=0;i<lf.length;i++){ showFiles(lf[i]); } } }else{ //否则直接打印所给目录的名字 System.out.println(file.getName()); } } } public static void main(String[] args) { File f = new File("e:"+File.separator); showFiles(f); } }
java程序中对数据的输入、输出操作是以“流”方式进行。JDK中提供了各式的“流”类来获取不同种类的数据。
数据流(Stream)是指数据通信的通道
三、IO流的分类
按流向分:
输入流:程序从数据源读取数据的流
输出流:程序向数据源写入数据的流
按数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
按功能分:
节点流:用于直接操作目标设备的流
处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、灵活的读写功能
JDK提供的流位于io包中,最高层级的有四种大的抽象流类,不能直接实例化,通过子类实例化。
输入流 输出流 字节流 InputStream OutputStream 字符流 Reader Writer
四、讨论一下以上四种抽象流类
1. InputStream:字节输入流的抽象父类,其他的字节输入流类都继承自InputStream,可以用来读取文件的字节信息。
package stream; import java.io.*; public class FileInputStreamDemo { public static void main(String[] args) { File file = new File("e:"+File.separator+"test.txt"); InputStream is = null; try { //获取读取的文件对象 is = new FileInputStream(file); //读取文件内容 int len=0; byte[] b = new byte[1024]; //设置每次读取的字节长度 while((len=is.read(b))!=-1){ String str = new String(b,0,len); System.out.print(str); } } catch (Exception e) { e.printStackTrace(); }finally{ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
2. OutputStream: 字节输出流的抽象父类,其他的字节输出流的都继承自OutStreamutStream,可以通过程序向文件中写入数据
3. Reader类:字符输入流的抽象父类,以字符为单位读取文件内容,一个字符两个字节,应创建一个字符缓冲区读取package stream; import java.io.*; public class OutputStreaDemo { public static void main(String[] args) { File file = new File("e:"+File.separator+"test.txt"); OutputStream os = null; try { os = new FileOutputStream(file); String str1 = "许愿天空的里程碑!"; String str2 = "许愿妖刀村正!"; byte[] b1 = str1.getBytes(); byte[] b2 = str2.getBytes(); //int len=0; os.write(b1,0,4); os.write(b2,0,4); System.out.println("写成功了哈~"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
4. Writer类:通过程序向文件中以字符为单位写入内容,写入后要调用flush()方法刷新缓冲区才能将缓冲区内容写入目标文件package stream; import java.io.*; public class FileReaderDemo { //字符输入流,读取文档字符的 public static void main(String[] args) { File file = new File("e:"+File.separator+"test.txt"); Reader fr = null; try { fr = new FileReader(file); //读取文档字符内容 char[] c = new char[1024]; //自定义字符缓冲区 int len =0; while((len=fr.read(c)) != -1){ System.out.println(new String(c,0,len)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { fr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
package stream; import java.io.*; public class FileWriterDemo { public static void main(String[] args) { File file = new File("e:"+ File.separator + "test.txt"); Writer w = null; try { w = new FileWriter(file,true); w.write("我是你爹,"); w.write("你爹要出妖刀村正了!"); w.write("你爸爸永远是你爸爸".toCharArray()); w.write('h'); w.flush(); System.out.println("写入成功!!!"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }