流的文件操作(File)

时间:2021-12-16 06:22:10

一、流的分类:

  1、流按照方向分类:分为输入流和输出流,流的操作是相对于内存而言。

    输入流的定义:当我们从数据源中将数据读取到内存中就称为输入流,也叫读取流。

    输出流的定义:当我们将内存中处理好的数据写入数据源,就称为输出流,写入流。

  2、流按照内容分类:可以分为字节流、字符流、对象流。

数据的传输在底层都是以二进制的方式传输,所以无论是哪种流,其实都是字节流。而字符流和对象流只是在字节的基础上做了一层封装,以便于对字符数据和对象数据进行操作。

二、流的父类

  1、所有字节流的父类都是:InputStream和OutputStream;

  2、所有字符流的父类都是:Reader和Writer。

三、流的操作步骤

  1、建立流。所谓建立流就是建立内存和数据源之间传输数据的通道。

  2、操作流。操作传输的数据。

  3、关闭流。关闭内存和数据源之间的通道,释放资源。

    例:

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;

    public class StreamTest{
    public StreamTest(){
      InputStream in = null;
        try {
         //建立流
      in = new FileInputStream("info.txt"); 
      int data = 0;
         //操作流,一次读取一个字节。如果为-1,那么表示读取完毕
      while((data = in.read()) != -1){
      System.out.println(data);
    }
      } catch (Exception e) {
      e.printStackTrace();
      }finally{
      try {
         //关闭流
       in.close();
      } catch (Exception e) {
      e.printStackTrace();
        }
      }
    }
  }

  备注:流使用完毕后,必须关闭,如果不关闭会浪费内存资源,另外,写入流有可能写不进数据。关闭的顺序必须是先建立的流后关闭,后建立的流先关闭。

四、建流的目的是:完成内存数据和磁盘数据的转换。

五、以下是部分流的文件操作

  //第二个参数为true,表示已追加的方式向资源文件中写入数据,运行代码几次,资源文件就会追加几次数据,并且不会覆盖资源文件原来的数据。

  OutputStream out = null;

  out = new FileOutputStream("info.txt",true);

  out.write("Java技术".getBytes());

  注:、当使用OoutputStream写入流时,如果文件不存在,读取流会抛出FileNotFoundException异常。写入流会自动创建新文件。但是前提是该文件所在的目录必须存在。

  //创建文件对象

  File f = new File("c:/abc/a.txt");

  //或得文件名

  String name = f.getName();

  System.out.println(name);

  //得到文件所在目录

  String dir = f.getParent();

  system.out.println(dir);

  //得到文件的绝对路径

  String path = f.getAbsolutePath();

  System.out.println(path);

  //判断文件对象所代表的文件或目录是否存在,如果存在,结果就为true

  boolean isEx = f.exists();

  System.out.println(isEx);

  //判断文件对象代表的是否是存在 的文件

  System.out,pritln(f.isFile());

  //判断文件对象代表的是否是目录

  System.out.println(f.isDirectory());

  //得到一个目录中偶有文件列表,包含文件和目录,但是不包含子目录中的内容

  File f = new File("D:/KwDownload");

  File[] fs = f.listFiles();

    for(File ft : fs){

      System.out.println(ft.getName());

      }

  //删除指定目录下的文件

  File f = new File("D:/KwDownload/a.docx");

  f.delete();

  //删除文件对象所代表的文件或目录,前提必须是空文件才删得掉

  File f = new File("D:/KwDownload/aaa");

  f.delete();

  //得到指定目录下所有文件及子文件夹中的文件

  public static void (String[] args){

    list(new File("D:/KwDownload"));

    }

  public static void list(File dirFile){

    File[] fs = dirFile.listFiles();

      for(File f : fs){

        if(f.isFile()){

          System.out.println(f.getAbsolutePath());

        }else{

          list(f)

          }

       }

    }

  //创建制定路径的目录

  File f = new File("D:/aaa");

  f.mkdir();

  //创建文件选择对象

  JFileChooser jfc = new JFileChooser;